2015-01-12 10 views
5

Ho un problema con Popen.communicate().Popen.communicate() restituisce (Nessuno, Nessuno) anche se i risultati di stampa dello script

Ho uno script che restituisce una stringa.

Quindi ho scritto il secondo script che accetta quella variabile.

v = "./myscript arg1 arg2" 
com = subprocess.Popen(v, shell=True).communicate() 
print com 

restituzioni com (Nessuna, Nessuna). Il punto è che posso stampare all'interno del primo script i risultati, risultato di stampa della shell. Non posso semplicemente assegnare quella stampa alla variabile.

Ovviamente il primo script restituisce il valore, non lo stampa.

+2

Se si intende utilizzare l'output standard per comunicare i risultati da 'myscript' al proprio script Python, non sarebbe necessario' myscript' per stampare qualcosa su STDOUT? – rchang

+0

Questa era la soluzione. –

risposta

5

Dal docs:

Si noti che se si desidera inviare i dati al stdin del processo, è necessario creare l'oggetto Popen con stdin=PIPE. Allo stesso modo, per ottenere qualcosa di diverso da None nella tupla dei risultati, è necessario fornire anche stdout=PIPE e/o stderr=PIPE.

Quindi, creare l'oggetto Popen con:

subprocess.Popen('lsr', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
+0

Grazie! Questo è un passo avanti, ma ora sto diventando una stringa vuota -.- –

+0

La risposta pigra non specifica dove aggiungere 'stdout = PIPE' o' stderr = PIPE'. – N8TRO

0

Ok, rchang trovare la soluzione. Forse sarà utile per gli sceneggiatori principianti come me.

Lo script principale non ha stampato il risultato, ma restituisce. Ho pensato che fosse opposto.

Grazie!

Problemi correlati