Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
PerlMonks  

exec() on Windows

by vitoco (Hermit)
on May 25, 2010 at 21:50 UTC ( [id://841640]=perlquestion: print w/replies, xml ) Need Help??

vitoco has asked for the wisdom of the Perl Monks concerning the following question:

I have a script that creates a file with a registered file type extension. When it is completed, I want to automagically run an application to open and display it.

I can use exec() as the last command of my script, and it works, except that the script waits for the app to close, just like system().

I'm not calling a program to open the doc, instead, I'm calling directly the created file, and expect Windows to chose for the proper or default app for that extension (just like a double click over the file in explorer).

Is there a workaround to this problem other than to call the application with my doc as a parameter using a list? My file is pure HTML, and I don't want to force the use of IE.

BTW, if I run a second instance of my script while the first one is waiting for IE to exit, it exits as expected just after the doc is displayed on a second tab, even if I use system()!!! (i.e. it does not wait... Argh!)

Test case:

son.pl:

#!perl -w use strict; warn "Calling a son...\n"; # Choose one: exec("son.html"); #system("son.html"); #exec("son.txt"); # The following does not wait: #exec("notepad.exe son.txt"); #exec("notepad.exe","son.html"); exit 0;

son.html:

<h1>JAPH</h1>

son.txt:

JAPH

Replies are listed 'Best First'.
Re: exec() on Windows
by BrowserUk (Patriarch) on May 25, 2010 at 21:54 UTC

    Try this:

    #!perl -w use strict; warn "Calling a son...\n"; system( 1, "son.html" );

    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.

      Bad luck... It worked only if called fom a CMD console, but not if I double click over it or it's shortcut...

      BTW, what it is supposed to do?

        It worked only if called fom a CMD console

        So, it works then.

        but not if I double click over it or it's shortcut...

        Why would you double click a .pl file instead of double-clicking the .html file?

        Why would you set up a short-cut to point at a.pl file to load a .html file, when you could just point the shortcut at the ,html file?

        (If you really need to do these things, read your docs about wperl.exe).


        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.
Re: exec() on Windows
by lamprecht (Friar) on May 26, 2010 at 12:09 UTC
    Hi,

    system("start", "/B","test.html");

    Cheers, Christoph

      Thanks. It worked both as .pl and .exe (pp).

      I was trying calling cmd.exe directly to detach child processes without waiting for them, but this way is far much clear.

      Strange that "start" with exec() does not work.

        start is a "shell builtin" command and does not exist as an external program, which is why it does not work with exec.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://841640]
Approved by linuxer
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others surveying the Monastery: (9)
As of 2024-03-19 08:43 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found