2012-09-26 13 views
56

Desde os.popen está siendo reemplazado por subprocess.Popen, me preguntaba cómo iba a convertirCómo utilizar subproceso popen Python

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

a subprocess.Popen()

Traté:

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

Pero supongo que no estoy escribiendo esto correctamente. Cualquier ayuda sería apreciada. Gracias

+0

¿Es esta una máquina de la máquina de Windows o Linux? – AAI

Respuesta

86

subprocess.Popen toma una lista de argumentos:

from subprocess import Popen, PIPE 

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

Incluso hay un section of the documentation dedicada a ayudar a los usuarios a migrar de os.popensubprocess.

+0

o agrega 'shell = True'. –

+11

@HansThen 'shell = True' es ** no ** recomendado. –

+0

Solo cuando se combina con la entrada __intrusted__. En este caso, puedes usarlo bien. –

7

Uso sh, que va a hacer las cosas mucho más fácil:

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

sh, está bien, sin embargo no es lo mismo con Popen del subproceso. es similar con la llamada del subproceso. – liuyang1

+7

sh es increíble, pero ten cuidado, no es compatible con Windows – dwurf

Cuestiones relacionadas