簡體   English   中英

在python 3中使用子進程

[英]Using subprocess in python 3

我正在使用子進程模塊在python 3中運行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 我是python 3的新手,在2.7中使用它可以提供所需的輸出,但是在這里我無法弄清楚。
這是我在python 2.7中獲得的輸出(對於名為anu.py的文件)-

anu.py:2:1: W191 indentation contains tabs
anu.py:3:1: W191 indentation contains tabs
anu.py:3:7: E228 missing whitespace around modulo operator
anu.py:4:1: W191 indentation contains tabs
anu.py:5:1: W191 indentation contains tabs
anu.py:6:1: W191 indentation contains tabs
anu.py:7:1: W191 indentation contains tabs
anu.py:7:9: E231 missing whitespace after ','
anu.py:8:1: W191 indentation contains tabs
anu.py:9:1: W191 indentation contains tabs
1

請幫助我。 謝謝

更新:
我嘗試使用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

subprocess.call僅返回其運行的進程的退出代碼。 通常,我建議使用subprocess.check_output ,它將返回subprocess.check_output的實際輸出。 但是,在特定情況下, pep8在某些情況下將返回非零退出代碼,這將使check_output引發異常。 您可以捕獲異常並從中提取輸出屬性:

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

或者直接使用subprocess.Popen

p = subprocess.Popen(['pep8', 'anu.py'], stdout=subprocess.PIPE)
(output, _) = p.communicate()

請注意,在Python 2.x和Python 3.x之間, call行為沒有改變。 您所看到的行為差異可能是因為您正在交互式提示中運行Python 2.7,但是將Python 3版本作為實際腳本運行。 在交互式提示中使用subprocess.call仍將最終打印該調用的輸出,即使該函數並未實際返回該輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM