On 15 Apr, 11:38, giohappy <gioha...@gmail.com> wrote: > 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/
Sorry, SendKeys is the solution. I was using it in the wronk place in my script... -- http://mail.python.org/mailman/listinfo/python-list