ホームページ >バックエンド開発 >Python チュートリアル >文字列入力を「subprocess.Popen」の標準入力に正しく渡すにはどうすればよいですか?

文字列入力を「subprocess.Popen」の標準入力に正しく渡すにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-19 06:04:51603ブラウズ

How to Correctly Pass String Input to `subprocess.Popen`'s stdin?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。