2011-07-07 33 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スクリプトを使用しませんが、決しては、それがstdoutではなくstdoutに出力されることを確認してください。また、プロセスが終了して出力がフラッシュされ、それを読むことができるようになるまで待つ必要があるかもしれません。 – deStrangis

答えて

2

the docsによると、stderrにpep8.py --count版画:

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

ですから、subprocess.PIPEに標準エラー出力を指示するsubprocss.Popenを指示する必要があります:

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

関連する問題