Stdin 経由で Subprocess.Popen に文字列入力を渡す
問題:
文字列を渡すを使用して subprocess.Popen の stdin 引数に追加します。 cStringIO.StringIO オブジェクトには必要な fileno 属性が欠如しているため、エラーが発生します。
解決策:
この問題を解決するには、詳細を使用することをお勧めします。 Popen.communicate() ドキュメントで概説されている簡単なアプローチ。 stdin=PIPE を設定すると、stdin のパイプを作成し、通信メソッドに文字列入力を直接提供できます。
from subprocess import Popen, PIPE, STDOUT p = Popen(['grep', 'f'], stdout=PIPE, stdin=PIPE, stderr=STDOUT) grep_stdout = p.communicate(input=b'one\ntwo\nthree\nfour\nfive\nsix\n')[0] print(grep_stdout.decode()) # Output: # -> four # -> five # ->
補足:
Python の場合3.5 (エンコードの場合は 3.6) では、subprocess.run により、文字列入力を渡し、出力を文字列として取得できるようになり、プロセスが簡素化されます。シングルコール。
from subprocess import run, PIPE p = run(['grep', 'f'], stdout=PIPE, input='one\ntwo\nthree\nfour\nfive\nsix\n', encoding='ascii') print(p.returncode) # Output: # -> 0 print(p.stdout) # Output: # -> four # -> five # ->
以上が文字列入力を「subprocess.Popen」の標準入力に正しく渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。