On Feb 3, 10:36 am, filip.sne...@gmail.com (Filip Sneppe) wrote: > Hi, > > I am writing a script that executes external command that may hang. > I want to capture all output produced by the external command and > continue with my perl code after a certain execution timeout for the > external program. > Since I am running the script on Windows, I cannot use any ALARM > mechanism. > > The best alternative I could come up with is the use of Win32::Job, eg. > > use win32::Job; > > my $timeout = 10; > my $job = Win32::Job->new; > $job->spawn(undef, "iscsicli.exe", (), ); > $job->run($timeout); > > print "ok\n"; > > This particular test hangs for 10 seconds (because the iscsicli.exe > command without any arguments doesn't return) and then continues. > > However, in my final script, I need to capture any output returned > by the external command, up to the point where the job gets killed, > and this has proven harder than it initially looked. > > What I've tried so far: > > - written to a temporary file by using this spawn syntax: > > $job->spawn(undef, "iscsicli.exe", (), { stdout => "$$.output.txt" } ); > > but this creates an empty file, I think because of a lack of > autoflushing > > - tried to redirect STDOUT to a variable before calling the > spawn() funtion, and enabling autoflush. Doesn't do the trick either, > and I don't know how to reset STDOUT to the default afterwards. > > Could anyone please provide a working piece of code that > can execute an external command, wait for it to finish yet kill > the command if it takes too long, and still capture all the output > (STDOUT and STDERR) up to the last line before it got killed. > Ideally I would even like to do this without creating any temporary > files. Thanks in advance! > > Best regards, > Filip
Let me know if you get any success. I tried IPC::Open2 and it didn't work. I find that on WinXP, iscsicli works find to call is as a command. i.e. `iscsicli ListPersistentTargets` but on Windows 7, iscsicli is spawn another shell for it's output. So the output can't be read from my program. Also, when I use open2 it hangs when I read. Regards, CEBundy -- To unsubscribe, e-mail: beginners-unsubscr...@perl.org For additional commands, e-mail: beginners-h...@perl.org http://learn.perl.org/