2012-09-26 66 views
56

由於os.popen正在subprocess.popen替代,我想知道我將如何轉換如何使用子popen方法的Python

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

到subprocess.popen()

我想:

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

但我想我沒有正確寫出來。任何幫助,將不勝感激。由於

+0

這是一個Windows機器或Linux機器? – AAI

回答

86

subprocess.Popen需要的參數列表:

from subprocess import Popen, PIPE 

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

甚至還有專門用於幫助用戶遷移從os.popensubprocess一個section of the documentation

+0

或添加'shell = True'。 –

+11

@HansThen'shell = True'是**不推薦。 –

+0

僅當與__untrusted__輸入結合使用時。在這種情況下,你可以使用它很好。 –

7

使用sh,它會讓事情更容易:

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

sh,這很好,但它與子進程的Popen不一樣。與子程序的調用相似, – liuyang1

+7

sh很棒但讀者要小心,它不支持Windows – dwurf