Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
PerlMonks  

Stop a .exe

by anshumangoyal (Scribe)
on Aug 21, 2012 at 08:01 UTC ( #988631=perlquestion: print w/ replies, xml ) Need Help??
anshumangoyal has asked for the wisdom of the Perl Monks concerning the following question:

I have a perl script which calls an executable (windows exe) named RunMe.exe. I am calling this .EXE using `RunMe.exe <args>`. Now when this executable is done with processing, it has to be stopped with "Enter". How can i do this automatically in script that it runs this .EXE and gives the output in a variable "@Result" and exits (by sending enter) without any human envolvement?
my @Results = `RunMe.exe <args>`; # My Program waits for input here which I dont want to.

Comment on Stop a .exe
Download Code
Re: Stop a .exe
by moritz (Cardinal) on Aug 21, 2012 at 08:05 UTC
Re: Stop a .exe
by nemesdani (Friar) on Aug 21, 2012 at 08:11 UTC
    Maybe you could use the kill function. Not elegant, I know.


    I'm too lazy to be proud of being impatient.

      Aren't backticks blocking?

Re: Stop a .exe
by BrowserUk (Pope) on Aug 21, 2012 at 08:30 UTC

    Install Win32::Socketpair and do:

    #! perl -slw use strict; use Win32::Socketpair qw[ winopen2 ]; ## Run the command and get a bi-direction pipe to it. my $pipe = winopen2( 'RunMe.exe arg arg arg' ); ## Fetch the results from the pipe my @results = <$pipe>; ## Send enter to it print $pipe "\n"; ## use @results here

    With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
    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.

    The start of some sanity?

      Not working. It keeps on waiting for pipe to close.

        Then you are using it wrong!

        Using the perl script as a substitute for your runme.exe:

        #! perl -slw use strict; printf "%030d\n", $_ for 1 .. 1e3; print "Press enter to exit";

        And this Perl script to run the above using winopen2():

        #! perl -slw use strict; use Win32::Socketpair qw[ winopen2 ]; ## Run the command and get a bi-direction pipe to it. my $pipe = winopen2( 'RunMe.pl' ); my @results = <$pipe>; print $pipe "\n"; print scalar @results; <STDIN>;

        The latter reads a thousand lines from the former, sends "\n" to it which allows it to end, and then prints out the number of lines read (1001 including the "Press Enter to exit prompt") amd waits. If you check the task manager you'll see that the child process has terminated:

        [12:05:50.87] C:\test>winopen2-test.pl 1001 [12:06:00.23] C:\test>

        With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
        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.

        The start of some sanity?

Re: Stop a .exe
by philiprbrenan (Monk) on Sep 01, 2012 at 13:08 UTC

    Please make sure that the program has no keyword which runs it in a non interactive mode, such as /q. If it does not, perhaps a note to the developer to suggest that it should have?

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (9)
As of 2014-09-18 23:07 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (126 votes), past polls