Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

Re^5: exec() on Windows

by BrowserUk (Pope)
on May 25, 2010 at 23:47 UTC ( #841659=note: print w/ replies, xml ) Need Help??


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

Okay. So when you say "it doesn't work when double-clicked", what actually happens?


Comment on Re^5: exec() on Windows
Re^6: exec() on Windows
by vitoco (Friar) on May 26, 2010 at 11:06 UTC

    When "double-clicked", exec() behaves as system() when IE is not already running, and system() behaves as exec() when IE is already running (displaying my doc in a new tab).

    This happens with both original .pl script (ActivePerl) and .exe binary (pp's "parl").

    Did you try the script in my first post? If not, may be you are lucky and don't have to fight against Windows, but if you have a Wintendo box with perl, save it along the first data file included in some folder, then double-click it in explorer and wait for IE to start. You should note that both programs are running together. Don't close neither of them, go to explorer window and double-click it again. This time, the program will finish as expected and IE will display a second tab with the doc.

    I tried this on WinXP (Spanish) and Win2K3 (English), the same happens...

    UPDATE: With behavior of exec() and system() I mean only the fact of waiting for the child process (IE) to close before exit or continue, respectively. A also tried my sample scripts on a machine with Firefox as the default web browser, and it does the same.

      Windows OS doesn't support exec in the POSIX form, just as it doesn't support fork. So these are both emulated by Perl on Windows--but not very accurately. In particular, exec will work pretty much exactly like system. Ie. It will start a new process and wait for that process to end.

      If however, you use system( 1, ... ) it will start the new process asynchronously (it won't wait) and if the perl script ends, the new process will continue as if the script had never existed.

      And yes. I use Windows.

      Now, how about you answer the question I asked?

      You've already agreed that if you replace exec with system( 1, 'yourname.html' );, and you run your script from the command line, it operates as you want it to.

      But, you said "it doesn't work" if you double-click it, or a short-cut to it, and my question to you was:

      WHAT ACTUALLY HAPPENS WHEN YOU DOUBLE CLICK IT, OR A SHORT CUT TO IT?


      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.
        WHAT ACTUALLY HAPPENS WHEN YOU DOUBLE CLICK IT, OR A SHORT CUT TO IT?

        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.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://841659]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (3)
As of 2014-09-02 00:58 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite cookbook is:










    Results (18 votes), past polls