由于subprocess.popen
正在取代os.popen
,我想知道如何转换
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
但我想我没有正确地写出这一点。任何帮助都将不胜感激。谢谢
发布于 2012-09-26 23:44:05
subprocess.Popen
接受一系列参数:
from subprocess import Popen, PIPE
process = Popen(['swfdump', '/tmp/filename.swf', '-d'], stdout=PIPE, stderr=PIPE)
stdout, stderr = process.communicate()
甚至还有一个section of the documentation致力于帮助用户从os.popen
迁移到subprocess
。
发布于 2012-09-27 12:14:45
使用sh,它会让事情变得简单得多:
import sh
print sh.swfdump("/tmp/filename.swf", "-d")
发布于 2021-01-31 19:57:49
在最近的Python版本中,subprocess
有了很大的变化。它提供了一个全新的类Popen
来处理os.popen1|2|3|4
。
新的subprocess.Popen()
import subprocess
subprocess.Popen('ls -la', shell=True)
它的论点是:
subprocess.Popen(args,
bufsize=0,
executable=None,
stdin=None, stdout=None, stderr=None,
preexec_fn=None, close_fds=False,
shell=False,
cwd=None, env=None,
universal_newlines=False,
startupinfo=None,
creationflags=0)
简而言之,新的Popen
包含了被分成4个单独的旧popen
的所有功能。
旧的popen
Method Arguments
popen stdout
popen2 stdin, stdout
popen3 stdin, stdout, stderr
popen4 stdin, stdout and stderr
您可以在Stack Abuse - Robert Robinson中获得更多信息。感谢他的付出。
https://stackoverflow.com/questions/12605498
复制相似问题