Spero che questa sia una semplice domanda python.perché non sottoprocesso.Popen (...) restituisce sempre?
Quando provo il seguente nell'interprete python:
>>> import process
>>> def test(cmd):
... p = subprocess.Popen(cmd)
...
>>> test(['ls', '-l'])
Verrà eseguito il ls -l
, ma ho bisogno di colpire "ritorno" per ottenere un nuovo prompt >>>.
Tuttavia, quando provo il seguente:
>>> import process
>>> def test(cmd):
... p = subprocess.Popen(cmd)
... p.wait()
...
>>> test(['ls', '-l'])
Poi il ls -l
viene eseguita con un prompt >>> immediatamente presente.
Un altra variante:
>>> import process
>>> def test(cmd):
... p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
...
>>> test(['ls', '-l'])
Questo mi darà un nuovo prompt immediato.
L'ultimo esempio è il più vicino a quello che voglio. Il mio obiettivo è quello di avviare un processo figlio, attendere che finisca e quindi utilizzare il suo stdout nel mio processo genitore facendo riferimento a p.stdout
lasciando allo stderr solo la stampa ovunque esso vada altrimenti.
In questo momento nella mia applicazione effettiva, l'ultima versione del proprio pende al: p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
con o senza p.wait()
.
Grazie,
Charlie
Senza reindirizzare alcuno dei gestori std del comando secondario, '.communicate()' non farà nulla di utile. Potrebbe essere meglio sostituirlo con una chiamata 'wait()'. – glglgl