Loading ...
Sorry, an error occurred while loading the content.

Automating Console Application

Expand Messages
  • brad_e1
    Hi All, I have an interactive console application that I am trying to automate. I want to send key strokes to an application that I spawn using the system call
    Message 1 of 6 , Apr 3, 2003
    • 0 Attachment
      Hi All,

      I have an interactive console application that I am trying to
      automate. I want to send key strokes to an application that I spawn
      using the system call and at the same time capture what the program
      dumps to stdout. I am working in windows XP and I cannot seem to get
      it to work. I tried redirecting the output of my application to a
      file but it doesn't seem to work because the output file output.txt
      is always empty.

      Can anybody tell me what I am doing wrong and if there is a better
      way to do this or provide me an example. I would appreciate any
      assistance that anyone can offer.

      Here is a example of what I am doing:

      use Win32::GuiTest qw/SendKeys FindWindowLike GetWindowText/;

      $Path = "C:/test";

      system("start $Path/myexe.exe -i config.ini >> output.txt");

      # Allow program time to start up
      sleep(2);

      my @windows = FindWindowLike(0, "myexe.exe", "");

      SendKeys("A~");
      SendKeys("B~");
      SendKeys("C~");
    • Ernesto Guisado
      Hi, ... Try system( $Path/myexe.exe -i config.ini output.txt ); instead. start creates a new console and that messes up the redirection. Take into account
      Message 2 of 6 , Apr 4, 2003
      • 0 Attachment
        Hi,

        > system("start $Path/myexe.exe -i config.ini >> output.txt");

        Try

        system("$Path/myexe.exe -i config.ini >> output.txt");

        instead.

        start creates a new console and that messes up the redirection.

        Take into account that once you've redirected the output, you won't
        be able to see it on screen, but the program should still respond to
        your keystrokes.

        Regards,
        Ernesto.


        --- In perlguitest@yahoogroups.com, "brad_e1" <brad_e1@y...> wrote:
        > Hi All,
        >
        > I have an interactive console application that I am trying to
        > automate. I want to send key strokes to an application that I spawn
        > using the system call and at the same time capture what the program
        > dumps to stdout. I am working in windows XP and I cannot seem to
        get
        > it to work. I tried redirecting the output of my application to a
        > file but it doesn't seem to work because the output file output.txt
        > is always empty.
        >
        > Can anybody tell me what I am doing wrong and if there is a better
        > way to do this or provide me an example. I would appreciate any
        > assistance that anyone can offer.
        >
        > Here is a example of what I am doing:
        >
        > use Win32::GuiTest qw/SendKeys FindWindowLike GetWindowText/;
        >
        > $Path = "C:/test";
        >
        > system("start $Path/myexe.exe -i config.ini >> output.txt");
        >
        > # Allow program time to start up
        > sleep(2);
        >
        > my @windows = FindWindowLike(0, "myexe.exe", "");
        >
        > SendKeys("A~");
        > SendKeys("B~");
        > SendKeys("C~");
        --
        http://triumvir.org
      • Chris Hilton
        You might also try looking at the IPC::Open2 and IPC::Open3 modules. I haven t used them, but they seem to do something similar to what you want. Chris Hilton
        Message 3 of 6 , Apr 4, 2003
        • 0 Attachment
          You might also try looking at the IPC::Open2 and IPC::Open3 modules. I haven't used them, but they seem to do something similar to what you want.
           
          Chris Hilton
          -----Original Message-----
          From: brad_e1 [mailto:brad_e1@...]
          Sent: Thursday, 03 April, 2003 21:42
          To: perlguitest@yahoogroups.com
          Subject: [perlguitest] Automating Console Application

          Hi All,

          I have an interactive console application that I am trying to
          automate. I want to send key strokes to an application that I spawn
          using the system call and at the same time capture what the program
          dumps to stdout. I am working in windows XP and I cannot seem to get
          it to work. I tried redirecting the output of my application to a
          file but it doesn't seem to work because the output file output.txt
          is always empty.

          Can anybody tell me what I am doing wrong and if there is a better
          way to do this or provide me an example. I would appreciate any
          assistance that anyone can offer.

          Here is a example of what I am doing:

          use Win32::GuiTest qw/SendKeys FindWindowLike GetWindowText/;

          $Path = "C:/test";

          system("start $Path/myexe.exe -i config.ini >> output.txt");

          # Allow program time to start up
          sleep(2);

          my @windows = FindWindowLike(0, "myexe.exe", "");

          SendKeys("A~");
          SendKeys("B~");
          SendKeys("C~");





          To unsubscribe from this group, send an email to:
          perlguitest-unsubscribe@yahoogroups.com



          Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.
        • brad_e1
          Hi Ernesto, First off, thanks for the reply. I appreciate the help that you offered. I do apologize for my delay in responding but I have been out of town for
          Message 4 of 6 , Apr 25, 2003
          • 0 Attachment
            Hi Ernesto,

            First off, thanks for the reply. I appreciate the help that you
            offered. I do apologize for my delay in responding but I have been
            out of town for the past three weeks and have not had access to a
            computer. I tried what you suggested but the problem is that the
            application that I am calling waits for input (it is menu driven) and
            the system call blocks until I quit my application. Therefore SendKeys
            () sends keystrokes to the console after my application exits.

            I have figured out a way to do it but right now it is a little slow
            because I do the following:
            system("start cmd.exe");
            SendKeys("myprog.exe >> results.txt");
            However I have to continually start and restart my application
            because results.txt is locked until my application exits.

            Is there a way to capture output text directly from the console in
            windows? I tried WMGetText() but it only appears to capture the
            console title and I can't figure out how to access the window itself.
            I can capture text from notepad but a console application appears to
            behave differently.

            Brad

            --- In perlguitest@yahoogroups.com, "Ernesto Guisado" <erngui@a...>
            wrote:
            > Hi,
            >
            > > system("start $Path/myexe.exe -i config.ini >> output.txt");
            >
            > Try
            >
            > system("$Path/myexe.exe -i config.ini >> output.txt");
            >
            > instead.
            >
            > start creates a new console and that messes up the redirection.
            >
            > Take into account that once you've redirected the output, you won't
            > be able to see it on screen, but the program should still respond
            to
            > your keystrokes.
            >
            > Regards,
            > Ernesto.
            >
            >
            > --- In perlguitest@yahoogroups.com, "brad_e1" <brad_e1@y...> wrote:
            > > Hi All,
            > >
            > > I have an interactive console application that I am trying to
            > > automate. I want to send key strokes to an application that I
            spawn
            > > using the system call and at the same time capture what the
            program
            > > dumps to stdout. I am working in windows XP and I cannot seem to
            > get
            > > it to work. I tried redirecting the output of my application to a
            > > file but it doesn't seem to work because the output file
            output.txt
            > > is always empty.
            > >
            > > Can anybody tell me what I am doing wrong and if there is a
            better
            > > way to do this or provide me an example. I would appreciate any
            > > assistance that anyone can offer.
            > >
            > > Here is a example of what I am doing:
            > >
            > > use Win32::GuiTest qw/SendKeys FindWindowLike GetWindowText/;
            > >
            > > $Path = "C:/test";
            > >
            > > system("start $Path/myexe.exe -i config.ini >> output.txt");
            > >
            > > # Allow program time to start up
            > > sleep(2);
            > >
            > > my @windows = FindWindowLike(0, "myexe.exe", "");
            > >
            > > SendKeys("A~");
            > > SendKeys("B~");
            > > SendKeys("C~");
            > --
            > http://triumvir.org
          • Jason Blakey
            You can try Win32::Process - it s non-blocking... Example use Win32::Process; my $workingDir = . ; my $process; Win32::Process::Create( $process,
            Message 5 of 6 , Apr 25, 2003
            • 0 Attachment
              You can try Win32::Process - it's non-blocking...

              Example

              use Win32::Process;
              my $workingDir = '.';

              my $process;
              Win32::Process::Create(
              $process,
              'path/to/app/app.exe',
              'app.exe -args',
              0,
              DETACHED_PROCESS,
              $workingDir);

              $process || die("No process" . Win32::FormatMessage(Win32::GetLastError));


              Thanks,
              jason


              On Fri, 25 Apr 2003 16:38:18 -0000, brad_e1 wrote
              > Hi Ernesto,
              >
              > First off, thanks for the reply. I appreciate the help that you
              > offered. I do apologize for my delay in responding but I have been
              > out of town for the past three weeks and have not had access to a
              > computer. I tried what you suggested but the problem is that the
              > application that I am calling waits for input (it is menu driven)
              > and the system call blocks until I quit my application. Therefore SendKeys
              > () sends keystrokes to the console after my application exits.
              >
              > I have figured out a way to do it but right now it is a little slow
              > because I do the following:
              > system("start cmd.exe");
              > SendKeys("myprog.exe >> results.txt");
              > However I have to continually start and restart my application
              > because results.txt is locked until my application exits.
              >
              > Is there a way to capture output text directly from the console in
              > windows? I tried WMGetText() but it only appears to capture the
              > console title and I can't figure out how to access the window
              > itself. I can capture text from notepad but a console application
              > appears to behave differently.
              >
              > Brad
              >
              > --- In perlguitest@yahoogroups.com, "Ernesto Guisado" <erngui@a...>
              > wrote:
              > > Hi,
              > >
              > > > system("start $Path/myexe.exe -i config.ini >> output.txt");
              > >
              > > Try
              > >
              > > system("$Path/myexe.exe -i config.ini >> output.txt");
              > >
              > > instead.
              > >
              > > start creates a new console and that messes up the redirection.
              > >
              > > Take into account that once you've redirected the output, you won't
              > > be able to see it on screen, but the program should still respond
              > to
              > > your keystrokes.
              > >
              > > Regards,
              > > Ernesto.
              > >
              > >
              > > --- In perlguitest@yahoogroups.com, "brad_e1" <brad_e1@y...> wrote:
              > > > Hi All,
              > > >
              > > > I have an interactive console application that I am trying to
              > > > automate. I want to send key strokes to an application that I
              > spawn
              > > > using the system call and at the same time capture what the
              > program
              > > > dumps to stdout. I am working in windows XP and I cannot seem to
              > > get
              > > > it to work. I tried redirecting the output of my application to a
              > > > file but it doesn't seem to work because the output file
              > output.txt
              > > > is always empty.
              > > >
              > > > Can anybody tell me what I am doing wrong and if there is a
              > better
              > > > way to do this or provide me an example. I would appreciate any
              > > > assistance that anyone can offer.
              > > >
              > > > Here is a example of what I am doing:
              > > >
              > > > use Win32::GuiTest qw/SendKeys FindWindowLike GetWindowText/;
              > > >
              > > > $Path = "C:/test";
              > > >
              > > > system("start $Path/myexe.exe -i config.ini >> output.txt");
              > > >
              > > > # Allow program time to start up
              > > > sleep(2);
              > > >
              > > > my @windows = FindWindowLike(0, "myexe.exe", "");
              > > >
              > > > SendKeys("A~");
              > > > SendKeys("B~");
              > > > SendKeys("C~");
              > > --
              > > http://triumvir.org
              >
              >
              > To unsubscribe from this group, send an email to:
              > perlguitest-unsubscribe@yahoogroups.com
              >
              >
              >
              > Your use of Yahoo! Groups is subject to
              > http://docs.yahoo.com/info/terms/



              --
              This email from jason blakey - jblakey@...
              "The luckiest guy in the world!"
            • Jim Dawson
              I have a program called tee (a port of the UNIX tee command) which will redirect input to both stdout and a file, use myprogram | tee outputfile will
              Message 6 of 6 , Apr 25, 2003
              • 0 Attachment
                I have a program called 'tee' (a port of the UNIX 'tee' command) which will redirect input to both stdout and a file, use 'myprogram | tee outputfile' will display the output of myprogrm to the console while writing it to outputfile.

                'tee' is a part of the open-source 'UNXUTILS' package which is a collection of Windows ports of various UNIX commands. UNXUTILS can be downloaded from unxutils.sourceforge.net

                -----Original Message-----
                From: "brad_e1" <brad_e1@...>
                To: perlguitest@yahoogroups.com
                Date: Fri, 25 Apr 2003 16:38:18 -0000
                Subject: [perlguitest] Re: Automating Console Application

                Hi Ernesto,

                First off, thanks for the reply. I appreciate the help that you
                offered. I do apologize for my delay in responding but I have been
                out of town for the past three weeks and have not had access to a
                computer. I tried what you suggested but the problem is that the
                application that I am calling waits for input (it is menu driven) and
                the system call blocks until I quit my application. Therefore SendKeys
                () sends keystrokes to the console after my application exits.

                I have figured out a way to do it but right now it is a little slow
                because I do the following:
                system("start cmd.exe");
                SendKeys("myprog.exe >> results.txt");
                However I have to continually start and restart my application
                because results.txt is locked until my application exits.

                Is there a way to capture output text directly from the console in
                windows? I tried WMGetText() but it only appears to capture the
                console title and I can't figure out how to access the window itself.
                I can capture text from notepad but a console application appears to
                behave differently.

                Brad

                --- In perlguitest@yahoogroups.com, "Ernesto Guisado" <erngui@a...>
                wrote:
                > Hi,
                >
                > > system("start $Path/myexe.exe -i config.ini >> output.txt");
                >
                > Try
                >
                > system("$Path/myexe.exe -i config.ini >> output.txt");
                >
                > instead.
                >
                > start creates a new console and that messes up the redirection.
                >
                > Take into account that once you've redirected the output, you won't
                > be able to see it on screen, but the program should still respond
                to
                > your keystrokes.
                >
                > Regards,
                > Ernesto.
                >
                >
                > --- In perlguitest@yahoogroups.com, "brad_e1" <brad_e1@y...> wrote:
                > > Hi All,
                > >
                > > I have an interactive console application that I am trying to
                > > automate. I want to send key strokes to an application that I
                spawn
                > > using the system call and at the same time capture what the
                program
                > > dumps to stdout. I am working in windows XP and I cannot seem to
                > get
                > > it to work. I tried redirecting the output of my application to a
                > > file but it doesn't seem to work because the output file
                output.txt
                > > is always empty.
                > >
                > > Can anybody tell me what I am doing wrong and if there is a
                better
                > > way to do this or provide me an example. I would appreciate any
                > > assistance that anyone can offer.
                > >
                > > Here is a example of what I am doing:
                > >
                > > use Win32::GuiTest qw/SendKeys FindWindowLike GetWindowText/;
                > >
                > > $Path = "C:/test";
                > >
                > > system("start $Path/myexe.exe -i config.ini >> output.txt");
                > >
                > > # Allow program time to start up
                > > sleep(2);
                > >
                > > my @windows = FindWindowLike(0, "myexe.exe", "");
                > >
                > > SendKeys("A~");
                > > SendKeys("B~");
                > > SendKeys("C~");
                > --
                > http://triumvir.org



                To unsubscribe from this group, send an email to:
                perlguitest-unsubscribe@yahoogroups.com



                Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
              Your message has been successfully submitted and would be delivered to recipients shortly.