2012-09-26 13 views
56

Dal os.popen che viene sostituito dal subprocess.Popen, mi chiedevo come avrei convertireCome utilizzare il sottoprocesso popen Python

os.popen('swfdump /tmp/filename.swf/ -d') 

a subprocess.Popen()

ho provato:

subprocess.Popen("swfdump /tmp/filename.swf -d") 
subprocess.Popen("swfdump %s -d" % (filename)) # NOTE: filename is a variable 
               # containing /tmp/filename.swf 

Ma suppongo che non lo stia scrivendo correttamente. Qualsiasi aiuto sarebbe apprezzato. Grazie

+0

Si tratta di una macchina Windows macchina o Linux? – AAI

risposta

86

subprocess.Popen prende una lista di argomenti:

from subprocess import Popen, PIPE 

process = Popen(['swfdump', '/tmp/filename.swf', '-d'], stdout=PIPE, stderr=PIPE) 
stdout, stderr = process.communicate() 

C'è anche un section of the documentation dedicata ad aiutare gli utenti a migrare os.popen-subprocess.

+0

o aggiungi 'shell = True'. –

+11

@HansThen 'shell = True' è ** non ** raccomandato. –

+0

Solo se combinato con l'input __untrusted__. In questo caso puoi usarlo bene. –

7

Usa sh, farà cose molto più facile:

import sh 
print sh.swfdump("/tmp/filename.swf", "-d") 
+0

sh, è buono, ma non è lo stesso con Popen di sottoprocesso. è simile al richiamo del sottoprocesso. – liuyang1

+7

sh è fantastico ma il lettore è attento, non supporta Windows – dwurf