BTW the lines:
#open (STDOUT, ">$tmpFile");
$fh = *STDOUT;
are a (cut and paste) typo - please ignore...
-----Original Message-----
From: Hornyak, Douglas
Sent: Thursday, May 23, 2002 3:27 PM
To: [EMAIL PROTECTED]
Subject: Win32::Process::Create and STDIO
OK. I'm at my wits end... so let me pose the question to you all.
I need to create a process (calling the uptime.exe program). The previous programmer
used system() but the exe keeps getting stalled and with system() there is no control
over it. So I'm rewriting using Win32::Process::Create. However, this doesn't work:
###################################
use Win32::Process;
my $server = "servername";
my $tmpFile = "output.temp";
my $cmd = "uptime.exe \\\\$server \/a \/p:30 > $tmpFile";
#open (STDOUT, ">$tmpFile");
$fh = *STDOUT;
print "calling $cmd...";
Win32::Process::Create( $oProcess,
"C:\\aaa_test\\uptime.exe",
$cmd,
1,
0,
"." );
print "process id is ". $oProcess->GetProcessID() . "\n";
print "Checking output file $tmpFile...";
###################################
the output file doesn't exist (is not created), and uptime.exe send me back it's usage
info as if there were a syntax error. If I remove the redirection so that:
my $cmd = "uptime.exe \\\\$server \/a \/p:30";
the uptime.exe works fine. But, now I can't get the output of the uptime.exe program.
It goes to the screen where I can watch it fly by 8^( I tried to use an old script of
mine which was used on Linux with open3, but it just slips right through and leaves a
zombie child process.
###################################
use Win32::Process;
use IPC::Open3;
use IO::Select;
use POSIX ":sys_wait_h";
my $server = "servername";
my $cmd = "uptime.exe \\\\$server \/a \/p:30 > $tmpFile";
# turn autoflush on
$| = 1;
$result = IssueCommand(1, "uptime.exe \\\\$server \/a \/p:30" );
print $result;
sub IssueCommand {
my $wait = shift;
my $cmd = shift;
### run the command and catch all output
my $pid = open3(*NSUP_IN, *NSUP_OUT, *NSUP_ERR, "$cmd");
print "Command issued, pid is $pid\n";
$SIG{CHLD} = sub {
print "" if waitpid( $pid, 0) > 0;
};
close(NSUP_IN);
$selector = IO::Select->new();
$selector->add(*NSUP_ERR, *NSUD_OUT);
while ( @ready = $selector->can_read )
{
foreach $fh ( @ready )
{
if ( fileno( $fh ) == fileno( NSUP_ERR ) )
{
$stderr = scalar <NSUP_ERR>;
}
else
{
$stdout = scalar <NSUP_OUT>;
}
$selector->remove($fh) if eof( $fh );
}
}
### clean up
close(NSUP_OUT);
close(NSUP_ERR);
$nscmd =~ s/\n/ /g;
if ( $stderr eq "" )
{
print "Command $cmd succeeded, output was $stdout\n";
return $stdout;
}
else
{
print "Command $cmd failed, error was $stderr\n";
return $stderr;
}
}
###################################
Any ideas?
p.s. Hey, Dave, did I miss this in chapter 8?
Visit our website at http://www.ubswarburg.com
This message contains confidential information and is intended only
for the individual named. If you are not the named addressee you
should not disseminate, distribute or copy this e-mail. Please
notify the sender immediately by e-mail if you have received this
e-mail by mistake and delete this e-mail from your system.
E-mail transmission cannot be guaranteed to be secure or error-free
as information could be intercepted, corrupted, lost, destroyed,
arrive late or incomplete, or contain viruses. The sender therefore
does not accept liability for any errors or omissions in the contents
of this message which arise as a result of e-mail transmission. If
verification is required please request a hard-copy version. This
message is provided for informational purposes and should not be
construed as a solicitation or offer to buy or sell any securities or
related financial instruments.
_______________________________________________
Perl-Win32-Admin mailing list
[EMAIL PROTECTED]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs
Visit our website at http://www.ubswarburg.com
This message contains confidential information and is intended only
for the individual named. If you are not the named addressee you
should not disseminate, distribute or copy this e-mail. Please
notify the sender immediately by e-mail if you have received this
e-mail by mistake and delete this e-mail from your system.
E-mail transmission cannot be guaranteed to be secure or error-free
as information could be intercepted, corrupted, lost, destroyed,
arrive late or incomplete, or contain viruses. The sender therefore
does not accept liability for any errors or omissions in the contents
of this message which arise as a result of e-mail transmission. If
verification is required please request a hard-copy version. This
message is provided for informational purposes and should not be
construed as a solicitation or offer to buy or sell any securities or
related financial instruments.
_______________________________________________
Perl-Win32-Admin mailing list
[EMAIL PROTECTED]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs