在python3中使用子进程

2024-09-28 05:19:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python3中使用subprocess模块运行shell命令。
这是我的密码

import subprocess
filename = "somename.py"  # in practical i'm using a real file, this is just for example
subprocess.call("pep8 %s" % filename, shell=True)) 

不同文件的输出只是01。我对python3还是个新手。在2.7中使用这个可以得到所需的输出,但在这里我无法计算出来。
这是我在Python2.7中得到的输出(对于名为-anu.py)的文件-

^{pr2}$

伙计们,请帮帮我。 谢谢

更新:
我尝试使用subprocess.check_output方法,
这是我得到的结果

>>> subprocess.check_output(["pep8", "anu.py"])
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "X/subprocess.py", line 584, in check_output
it too will be used internally.  Example:
subprocess.CalledProcessError: Command '['pep8', 'anu.py']' returned non-zero exit status 1

Tags: 模块文件inpyoutputchecklineshell
1条回答
网友
1楼 · 发布于 2024-09-28 05:19:02

subprocess.call只返回它运行的进程的退出代码。通常我建议使用^{},它将返回子进程的实际输出。但是,在您的特定情况下,pep8在某些情况下将返回非零退出代码,这将使check_output引发异常。您可以捕获异常并从中提取输出属性:

try:
    output = subprocess.check_output(['pep8', 'anu.py'])
except subprocess.CalledProcessError as e:
    output = e.output

或者直接使用subprocess.Popen

^{pr2}$

请注意,call行为在Python 2.x和python3.x之间没有变化。您看到的行为差异可能是因为您在交互式提示下运行python2.7,但将python3版本作为实际脚本运行。在交互提示中使用subprocess.call仍然会打印调用的输出,即使它实际上不是由函数返回的。在

相关问题 更多 >

    热门问题