Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris

Re^8: exec() on Windows

by vitoco (Friar)
on May 27, 2010 at 21:48 UTC ( #841965=note: print w/replies, xml ) Need Help??

in reply to Re^7: exec() on Windows
in thread exec() on Windows


When I run my program not from a command line, IE is instructed to open the file. This is OK. What is not the expected behavior is that the script interpreter (perl.exe) WAITS for IE to close, leaving it as a console window, a button in the task bar and related things. I.e. it does not seem to be asyncroneous.

On the other hand, I neither expected that perl.exe didn't wait when IE was already open, even if I use system() in the standard way.

The start /B trick with system() was the best workaround in my case. Now, my script always finishes while IE (or the default browser) is loading the html report.

Replies are listed 'Best First'.
Re^9: exec() on Windows
by BrowserUk (Pope) on May 27, 2010 at 22:51 UTC

    Hm. Strange that, because I just tested it, (system( 1, 'the.html';) again, and it works here on my Vista machine: from the command line, double-clicking the .pl file within explorer; and double-clicking a short-cut to the .pl file. (Although I did have to modify the properties of the short cut to start it minimised to avoid the flash of the shell window.

    It also works on my old XP machine. All three ways.

    I don't use PAR:Packer, but if the only reason for using that is to conceal the perl, your AS distribution comes with utilty called pl2bat. As the name suggests, it converts the .pl file to a .bat file. So, I tried that, and that works in all three ways also.

    I've requested a friend try it on his Win2003 setup. He hasn't got back to me yet, but I'll lay odds it works there too.

    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.

      Just tested it again but with a new script:

      #!perl -w use strict; warn "(1) Starting up a browser...\n"; system(1, "son.html"); warn "(2) Browser quits...\n"; sleep 10; warn "(3) Bye, bye...\n"; exit 0;

      You were right: that form of the system() call did not wait for the browser to quit... the console showed the first two messages almost at the same time, but after 10 seconds, the third message appeared and the console did NOT close... 'til I closed the browser.

      Then, the problem is another :-(

      BTW, I do need the console to be opened, as it shows some messages about the file being generated, so it is not a flashing console.

      About pl2bat, it places your perl code inside a bat script, just to allow you to call it from a command line without having to type the .pl extension (if it is associated to perl.exe) or having to call perl.exe with your script as a parameter (if not). Anyway, you still need have perl installed in your box. pp from PAR::Packer builds an .exe file that contains the "parl" interpreter, your script and all required modules. No perl installation is needed. When run, all is extracted on the fly... of course, a 10KB script will be turned into a 4MB exe file, and there is a startup delay, but I can live with that.

        I have to assume that it is an artefact of pp then. But, as start /b works for you, it probably not worth the effort of trying to track down the cause.

        It would be interesting to try POSIX's _exit instead of exit, but that's not as good a solution as start /b if that works.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://841965]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (15)
As of 2018-05-28 09:04 GMT
Find Nodes?
    Voting Booth?