2012-09-26 15 views
56

Od os.popen jest zastępowany przez subprocess.Popen, zastanawiałem się, w jaki sposób przekonwertowaćJak korzystać podproces POPEN Python

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

do subprocess.Popen()

Próbowałem:

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

Ale myślę, że nie piszę tego poprawnie. Każda pomoc będzie doceniona. Dzięki

+0

Jest to maszyna Maszyna systemu Windows lub Linux? – AAI

Odpowiedz

86

subprocess.Popen pobiera listę argumentów:

from subprocess import Popen, PIPE 

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

Jest nawet section of the documentation poświęcona pomagając użytkownikom migrację z os.popen do subprocess.

+0

lub dodaj 'shell = True'. –

+11

@HansThen 'shell = True' jest ** nie ** zalecane. –

+0

Tylko w połączeniu z wejściami __untrusted__. W takim przypadku możesz z niego korzystać w porządku. –

7

Zastosowanie sh, będzie to zrobić rzeczy o wiele łatwiejsze:

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

sh, to dobrze, jednak nie jest tak samo z Popen z podprocesu. jest podobny do wywołania podprocesu: – liuyang1

+7

sh jest niesamowite, ale uważaj na czytelnika, nie obsługuje systemu Windows – dwurf