1

私はここで多くのことを検索し、グーグルでも検索して、最初のコマンドの stderr が最終的な stderr に表示されない理由を見つけようとしました。「check_output」(python3) や「commands」(python2) などの他のメソッドは知っていますが、独自のクロスプラットフォームのメソッドを作成したいと考えています。問題は次のとおりです。

import subprocess

p1 = subprocess.Popen('dirr', shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
p2 = subprocess.Popen('find "j"', shell=True, stdin=p1.stdout, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
p1.stdout.close()
output,error=p2.communicate()
print(output,'<----->',error)

stderr=subprocess.STDOUT のリダイレクトも試しましたが、状況は変わりませんでした。stdout または stderr で確認できるように、最初のコマンドから stderr をリダイレクトする方法を教えてください。

よろしく、

4

2 に答える 2

1

2番目のコマンドの/にstderrある最初のコマンドを確認するには:stdoutstderr

  • 2番目のコマンドは、stderr1たとえば、stdin2
  • 2番目のコマンドは、このコンテンツをstdout2/stderr2に出力できます。

#!/usr/bin/env python
import sys
from subprocess import Popen, PIPE, STDOUT

p1 = Popen([sys.executable, '-c', """import sys; sys.stderr.write("stderr1")"""],
           stderr=STDOUT, stdout=PIPE)
p2 = Popen([sys.executable, '-c', """import sys
print(sys.stdin.read() + " stdout2")
sys.stderr.write("stderr2")"""],
           stdin=p1.stdout, stderr=PIPE, stdout=PIPE)
p1.stdout.close()
output, error = p2.communicate()
p1.wait()
print(output, '<----->', error)

出力

('stderr1 stdout2\n', '<----->', 'stderr2')
于 2012-06-20T18:38:47.963 に答える
-1

p2の場合、別のプログラムにパイプしていないため、出力のいずれにもsubprocess.PIPEを使用しないでください。

于 2012-06-20T17:06:07.547 に答える