2011-07-07 97 views
3

我正在開發一個項目,以在本地項目上運行PEP8樣式檢查。我試圖使用子進程方法,並且能夠獲得提示的生成終端輸出以改進樣式並將其保存爲字符串。子流程命令輸出丟失

我的代碼來生成PEP8風格是如下:

def run_pep8_style(target): 
    pep_tips = subprocess.Popen("python pep8.py --ignore=E111,E501 --filename=*.py " + target, shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE) 
    tips = pep_tips.communicate()[0] 

    print "Style: " 
    print tips 

不過,我試圖生成使用相同的方法子和存儲計數,但我成功做的。終端顯示輸出,但不會捕獲到字符串變量中。

def run_pep8_count(target): 
    pep_tips = subprocess.Popen("python pep8.py --ignore=E111,E501 --count -qq --filename=*.py " + target, shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE) 
    tips = pep_tips.communicate()[0] 
    print "Count: " 
    print tips 

奇怪的是,我能夠從終端文本樣式列表中存儲到一個字符串變量,但是當我試圖捕捉PEP8計數返回None。計數的終端輸出是否與樣式列表不同?我是Python編程的新手,所以任何幫助,將不勝感激。謝謝。

+0

從未使用過pep8.py腳本您正在使用,但檢查它打印到標準輸出而不是標準錯誤。另外,也許你必須等到該過程結束後才能刷新輸出,並且可以讀取它。 – deStrangis

回答

2

the docspep8.py --count打印到標準錯誤:

--count    print total number of errors and warnings to standard 
         error and set exit code to 1 if total is not null 

所以,你需要告訴subprocss.Popen到stderr定向到subprocess.PIPE

pep_tips = subprocess.Popen("python pep8.py --ignore=E111,E501 --count -qq   
       --filename=*.py " + target, shell=False, 
       stdin=subprocess.PIPE, stdout=subprocess.PIPE, 
       stderr=subprocess.PIPE) 

tips,tips_err = pep_tips.communicate() 
print tips_err 
+0

謝謝,你的解決方案對我來說是完美的。謝謝。 =) – Philip