in reply to Re: Nonblocking commands in Windows
in thread Nonblocking commands in Windows
[user@host]> streaming_output_script.pl&
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: Nonblocking commands in Windows
by BrowserUk (Patriarch) on Aug 04, 2007 at 01:47 UTC | |
Well, I doubt you need to do that on unix. I certainly don't need to on Win32. Given junk2.pl that looks like this (note this script won't terminate naturally for nearly 3 hours):
And calling that from this script using a piped open in the same manner as the OP uses:
I get this output:
Which shows that the parent receives the output from the child as soon as it produces it. And I seriously doubt that the '&' is required under unix either. Even if I leave stdout buffering enabled
It takes a while longer (~3 minutes) before the child fills the output buffer and the parent starts to receive the output (in one huge flurry):
But it certainly doesn't have to wait 3 hours for the child to finish before it gets it. So, unless java uses a huge output buffer, or the java program produces very little output, I doubt the problem is down to buffering either. And if it is, there is nothing the OP could do with buffering in the calling script to change it anyway. So, it comes back to the question, what exactly did the OP mean when he said: How can I get the STDOUT and STDERR from that pipe without waiting for it to complete... And until he clarifies that, his SoPW is unanswerable. Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
| [reply] [d/l] [select] |
by technojosh (Priest) on Aug 04, 2007 at 13:43 UTC | |
Now when I run them using the piped open from the OP (original post? - still learning...) I get back to my original problem, the calling script will not print any of the pipe's output until the pipe command has completed. I look at your first example though, do you think I am barking up the wrong tree to think the Perl caller is the problem? I have access to the java files, I will try tinkering with their output buffering and see if that yields any results. Thanks! | [reply] |
by BrowserUk (Patriarch) on Aug 04, 2007 at 16:00 UTC | |
I'm not a cgi person, but there are various things that could be causing the symptoms you are describing. You need to determine where the delays are occuring. If the java program produces a steady stream of output when invoked via the command line, it probably isn't the source of your problem. You could confirm that it isn't your perl cgi script, by invoking it directly from the command line and watching what happens. If it also produces a steady stream when invoked this way, then there are a couple of other places where the problem could lie. Eg. If you supply a better picture of what you are doing--what server, browser, html formatting etc--you are using, then one of the many experienced CGI people here will be probably be able to offer you better ways of determining the source of your problem, and probably a solution to it. Ultimately, unless your web server is dedicated to running just this task, or just a few low-demand tasks, it's generally not a good idea to have a cgi script that takes hours to run. The usual solutions to this involve forking, but they generally don't work under Win32 unless you are also using cygwin. I do have an alternative to that, but you would still need to fix the above problem(s) first. Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
| [reply] [d/l] [select] |
by technojosh (Priest) on Aug 06, 2007 at 14:37 UTC | |
by BrowserUk (Patriarch) on Aug 06, 2007 at 18:25 UTC | |