[Python] subprocess: come evitare il freezing durante la lettura dallo stdout di un processo?

G. Allegri giohappy a gmail.com
Mer 15 Apr 2009 10:43:38 CEST


Sì, ho provato sia con

stdout_value = proc.communicate('\n')[0]

che con

proc.stdin.write('\n')

ma niente da fare. Addirittura con SendKeys non ottengo il risultato...

Il 14 aprile 2009 16.05, G. Allegri <giohappy a gmail.com> ha scritto:
> Gentili colleghi pythonisti,
> sono alle prese col modulo subprocess, perché devo interagire con
> un'applicazione console su Windows (di terze parti), la quale richiede
> alla fine dell'esecuzione (e dopo aver stampato i risultati sullo
> stdout) che l'utente prema sulla tastiera per fare terminare il
> processo.
>
> Sono bloccato alle prime righe:
>
> proc = subprocess.Popen('la_mia_applicazione',
>                       shell=True,
>                       stdout=subprocess.PIPE,
>                       )
> stdout_value = proc.communicate()[0]
> #stdout_value = proc.stdout.readlines()
> PROCESS_TERMINATE = 1
> handle = win32api.OpenProcess(PROCESS_TERMINATE, False, proc.pid)
> win32api.TerminateProcess(handle, -1)
> win32api.CloseHandle(handle)
> print stdout_value
>
> Ho usato TerminateProcess per forzare l'uscita dall'applicazione senza
> l'interazione con l'utente, ma ricevo un errore di 'Access Denied'
> perché, suppongo, proc.communicate (ma anche proc.stdout.readlines)
> mantengono un handle su proc in attesa, forse, di un EOF, che non ci
> sarà mai poiché l'applicazione non termina...
> Se non leggo lo stdout, ovviamente, riesco a forzare il termine del
> programma senza errori.
>
> Come posso uscire da questo inghippo?
> Grazie,
> Giovanni
>


Maggiori informazioni sulla lista Python