Sponsored Content
Top Forums Shell Programming and Scripting passing "stderr " to a subroutine.. Post 91065 by sekar sundaram on Tuesday 29th of November 2005 07:14:24 PM
Old 11-29-2005
solution

after some search i got the solution.
for information of others i am replying to my post itself..

i think with system command we cant get the stderr separately.
----------------
Why can't I get the output of a command with system()?
You're confusing the purpose of system() and backticks (``). system() runs a command and returns exit status information (as a 16 bit value: the low 7 bits are the signal the process died from, if any, and the high 8 bits are the actual exit value). Backticks (``) run a command and return what it sent to STDOUT.
----------------
the solution is:
instead of using the system command we have to use backticks(``).

=============
How can I capture STDERR from an external command?
There are three basic ways of running external commands:

system $cmd; # using system()
$output = `$cmd`; # using backticks (``)
open (PIPE, "cmd |"); # using open()With system(), both STDOUT and STDERR will go the same place as the script's STDOUT and STDERR, unless the system() command redirects them. Backticks and open() read only the STDOUT of your command

=============
system, backticks, exe--- are the three ways to run commands...
-------
i use this line.."i think" since it might be correct or wrong. i am still learning..
-------
moer details :
http://perldoc.perl.org/perlfaq8.html
 

9 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Explain the line "mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'`"

Hi Friends, Can any of you explain me about the below line of code? mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'` Im not able to understand, what exactly it is doing :confused: Any help would be useful for me. Lokesha (4 Replies)
Discussion started by: Lokesha
4 Replies

2. Shell Programming and Scripting

Adding custom mesg. when redirecting "exec 2>stderr.err" ?

Doubt regarding using "exec" command to redirect the STDERR to a file. e.g I did it this way. mystage.sh #!/bin/sh exec 2>stage.err .... .... cat stage.err mv: cannot move `/root/stage' to a subdirectory of itself, `/root/stage_old/stage' ls: *.zDB: No such file or... (0 Replies)
Discussion started by: snurani
0 Replies

3. Shell Programming and Scripting

Why stderr file descriptor redirection makes ksh's "select" construct hang.

I am trying to use one global declaration --> "exec 2>$ERR" to capture all stderr outputs that may occur anywhere in my script. Then close it at the end of the script using --> "exec 2<&-" I am using KSH on Solaris 8. KSH Version M-11/16/88i If I comment two "exec .." statements in the... (11 Replies)
Discussion started by: kchinnam
11 Replies

4. Shell Programming and Scripting

tar "--totals" writes to stderr not stdout?

I want to use the "--totals" option in GNU tar for some reporting, however I have discovered that it writes the output to stderr not stdout and I would like to know why. This is running from BASH. mkdir /tmp/test touch /tmp/test/foo.file cd /tmp/ tar --totals -clpzf test.tar.gz test 2>... (2 Replies)
Discussion started by: jelloir
2 Replies

5. Shell Programming and Scripting

awk command to replace ";" with "|" and ""|" at diferent places in line of file

Hi, I have line in input file as below: 3G_CENTRAL;INDONESIA_(M)_TELKOMSEL;SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL My expected output for line in the file must be : "1-Radon1-cMOC_deg"|"LDIndex"|"3G_CENTRAL|INDONESIA_(M)_TELKOMSEL"|LAST|"SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL" Can someone... (7 Replies)
Discussion started by: shis100
7 Replies

6. Shell Programming and Scripting

Redirect stdout/stderr, except e.g. "STRING"

Hi, I'm running a program (Python) whose output I would like to redirect to a log. But the program calls a library (that I cannot change), which outputs all sorts of useless information. I would like to redirect all output from my Python program into this log, except output that matches the... (7 Replies)
Discussion started by: rswindle
7 Replies

7. UNIX for Dummies Questions & Answers

Using "mailx" command to read "to" and "cc" email addreses from input file

How to use "mailx" command to do e-mail reading the input file containing email address, where column 1 has name and column 2 containing “To” e-mail address and column 3 contains “cc” e-mail address to include with same email. Sample input file, email.txt Below is an sample code where... (2 Replies)
Discussion started by: asjaiswal
2 Replies

8. Shell Programming and Scripting

Bash script - Print an ascii file using specific font "Latin Modern Mono 12" "regular" "9"

Hello. System : opensuse leap 42.3 I have a bash script that build a text file. I would like the last command doing : print_cmd -o page-left=43 -o page-right=22 -o page-top=28 -o page-bottom=43 -o font=LatinModernMono12:regular:9 some_file.txt where : print_cmd ::= some printing... (1 Reply)
Discussion started by: jcdole
1 Replies

9. AIX

Apache 2.4 directory cannot display "Last modified" "Size" "Description"

Hi 2 all, i have had AIX 7.2 :/# /usr/IBMAHS/bin/apachectl -v Server version: Apache/2.4.12 (Unix) Server built: May 25 2015 04:58:27 :/#:/# /usr/IBMAHS/bin/apachectl -M Loaded Modules: core_module (static) so_module (static) http_module (static) mpm_worker_module (static) ... (3 Replies)
Discussion started by: penchev
3 Replies
IO::CaptureOutput(3pm)					User Contributed Perl Documentation				    IO::CaptureOutput(3pm)

NAME
IO::CaptureOutput - capture STDOUT and STDERR from Perl code, subprocesses or XS VERSION
This documentation describes version 1.1102. SYNOPSIS
use IO::CaptureOutput qw(capture qxx qxy); # STDOUT and STDERR separately capture { noisy_sub(@args) } $stdout, $stderr; # STDOUT and STDERR together capture { noisy_sub(@args) } $combined, $combined; # STDOUT and STDERR from external command ($stdout, $stderr, $success) = qxx( @cmd ); # STDOUT and STDERR together from external command ($combined, $success) = qxy( @cmd ); DESCRIPTION
This module provides routines for capturing STDOUT and STDERR from perl subroutines, forked system calls (e.g. "system()", "fork()") and from XS or C modules. FUNCTIONS
The following functions will be exported on demand. capture() capture &subroutine, $stdout, $stderr; Captures everything printed to "STDOUT" and "STDERR" for the duration of &subroutine. $stdout and $stderr are optional scalars that will contain "STDOUT" and "STDERR" respectively. "capture()" uses a code prototype so the first argument can be specified directly within brackets if desired. # shorthand with prototype capture { print __PACKAGE__ } $stdout, $stderr; Returns the return value(s) of &subroutine. The sub is called in the same context as "capture()" was called e.g.: @rv = capture { wantarray } ; # returns true $rv = capture { wantarray } ; # returns defined, but not true capture { wantarray }; # void, returns undef "capture()" is able to capture output from subprocesses and C code, which traditional "tie()" methods of output capture are unable to do. Note: "capture()" will only capture output that has been written or flushed to the filehandle. If the two scalar references refer to the same scalar, then "STDERR" will be merged to "STDOUT" before capturing and the scalar will hold the combined output of both. capture &subroutine, $combined, $combined; Normally, "capture()" uses anonymous, temporary files for capturing output. If desired, specific file names may be provided instead as additional options. capture &subroutine, $stdout, $stderr, $out_file, $err_file; Files provided will be clobbered, overwriting any previous data, but will persist after the call to "capture()" for inspection or other manipulation. By default, when no references are provided to hold STDOUT or STDERR, output is captured and silently discarded. # Capture STDOUT, discard STDERR capture &subroutine, $stdout; # Discard STDOUT, capture STDERR capture &subroutine, undef, $stderr; However, even when using "undef", output can be captured to specific files. # Capture STDOUT to a specific file, discard STDERR capture &subroutine, $stdout, undef, $outfile; # Discard STDOUT, capture STDERR to a specific file capture &subroutine, undef, $stderr, undef, $err_file; # Discard both, capture merged output to a specific file capture &subroutine, undef, undef, $mergedfile; It is a fatal error to merge STDOUT and STDERR and request separate, specific files for capture. # ERROR: capture &subroutine, $stdout, $stdout, $out_file, $err_file; capture &subroutine, undef, undef, $out_file, $err_file; If either STDOUT or STDERR should be passed through to the terminal instead of captured, provide a reference to undef -- "undef" -- instead of a capture variable. # Capture STDOUT, display STDERR capture &subroutine, $stdout, undef; # Display STDOUT, capture STDERR capture &subroutine, undef, $stderr; capture_exec() ($stdout, $stderr, $success, $exit_code) = capture_exec(@args); Captures and returns the output from "system(@args)". In scalar context, "capture_exec()" will return what was printed to "STDOUT". In list context, it returns what was printed to "STDOUT" and "STDERR" as well as a success flag and the exit value. $stdout = capture_exec('perl', '-e', 'print "hello world"'); ($stdout, $stderr, $success, $exit_code) = capture_exec('perl', '-e', 'warn "Test"'); "capture_exec" passes its arguments to "system()" and on MSWin32 will protect arguments with shell quotes if necessary. This makes it a handy and slightly more portable alternative to backticks, piped "open()" and "IPC::Open3". The $success flag returned will be true if the command ran successfully and false if it did not (if the command could not be run or if it ran and returned a non-zero exit value). On failure, the raw exit value of the "system()" call is available both in the $exit_code returned and in the $? variable. ($stdout, $stderr, $success, $exit_code) = capture_exec('perl', '-e', 'warn "Test" and exit 1'); if ( ! $success ) { print "The exit code was " . ($exit_code >> 8) . " "; } See perlvar for more information on interpreting a child process exit code. capture_exec_combined() ($combined, $success, $exit_code) = capture_exec_combined( 'perl', '-e', 'print "hello "', 'warn "Test " ); This is just like "capture_exec()", except that it merges "STDERR" with "STDOUT" before capturing output. Note: there is no guarantee that text printed to "STDOUT" and "STDERR" in the subprocess will be appear in order. The actual order will depend on how IO buffering is handled in the subprocess. qxx() This is an alias for "capture_exec()". qxy() This is an alias for "capture_exec_combined()". SEE ALSO
o IPC::Open3 o IO::Capture o IO::Utils o IPC::System::Simple AUTHORS
o Simon Flack <simonflk _AT_ cpan.org> (original author) o David Golden <dagolden _AT_ cpan.org> (co-maintainer since version 1.04) COPYRIGHT AND LICENSE
Portions copyright 2004, 2005 Simon Flack. Portions copyright 2007, 2008 David Golden. All rights reserved. You may distribute under the terms of either the GNU General Public License or the Artistic License, as specified in the Perl README file. perl v5.10.1 2010-02-15 IO::CaptureOutput(3pm)
All times are GMT -4. The time now is 09:47 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy