On 15 Apr, 11:20, Kushal Kumaran <kushal.kuma...@gmail.com> wrote: > On Wed, Apr 15, 2009 at 1:20 PM,giohappy<gioha...@gmail.com> wrote: > > On 14 Apr, 18:52, MRAB <goo...@mrabarnett.plus.com> wrote: > >> giohappywrote: > >> > Hello everyone. > >> > I'm trying to use subprocess module to launch a Windows console > >> > application. The application prints some results to standard output > >> > and then waits for the user to press any key to terminte. I can't > >> > control this behaviour, as the application is not mine... > >> > I'm stuck at the very first lines of my code. I'm trying to force > >> > process termination (even with proc.terminate()), and it works only if > >> > I don't read from stdout. If I do proc.stdout.read() the process > >> > hangs, and I have to manually press the keyboard to interrupt it. > >> > Probably it's due a low-level handle that is kept on the process > >> > stdout, waiting for the keypress event... > > >> > How can I solve it? > >> > Giovanni > > >> > ------- Code excerpt------- > > >> > proc = subprocess.Popen('the_app.exe', > >> > shell=True, > >> > stdout=subprocess.PIPE, > >> > ) > >> > #stdout_value = proc.communicate()[0] > >> > stdout_value = proc.stdout.read() > >> > PROCESS_TERMINATE = 1 > >> > handle = win32api.OpenProcess(PROCESS_TERMINATE, False, proc.pid) > >> > win32api.TerminateProcess(handle, -1) > >> > win32api.CloseHandle(handle) > >> > print stdout_value > > >> Try this: > > >> proc = subprocess.Popen('the_app.exe', > >> shell=True, > >> stdin=subprocess.PIPE, > >> stdout=subprocess.PIPE, > >> ) > >> stdout_value = proc.communicate("\n")[0] > > > MRAB, I've tried that too but no result... I still have to press a > > keybord key to terminate (the classical "Press any key to continue") > > If it actually is "Press any key to continue" rather than "Press Enter > to continue", it is likely directly using the console using available > low-level APIs, rather than reading from stdin. AFAIK, subprocess > cannot handle that. > > -- > kushal
If also tried with SendKeys [1], wich uses the windows.h keybd_event (), but it doesn't work... Ok, I leave this try, and look for a way to wrap the application in a bat file, hoping to succesfuly simulate the keypress event inside it. [1] http://www.rutherfurd.net/python/sendkeys/ -- http://mail.python.org/mailman/listinfo/python-list