ホームページ >バックエンド開発 >Python チュートリアル >Python で `subprocess.Popen` と `subprocess.run` に文字列を渡すにはどうすればよいですか?

Python で `subprocess.Popen` と `subprocess.run` に文字列を渡すにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-06 07:50:111065ブラウズ

How to Pass Strings to `subprocess.Popen` and `subprocess.run` in Python?

stdin 経由で subprocess.Popen に文字列を渡す

subprocess.Popen に文字列を渡すには、stdin= を指定することが必須です。関数呼び出し内の PIPE。これにより、Popen オブジェクトの 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())
# -> four
# -> five
# ->

stdin=PIPE を指定すると、入力文字列を stdin.communicate() を通じて grep プロセスに渡すことができ、入力データの処理とデータの取得が可能になります。コマンドの出力。

Python 3.5 以降のバージョンでは、subprocess.run 関数が提供されます。これにより、文字列を外部コマンドに渡し、その出力を取得するプロセスが簡素化されます。これは次のように説明できます。

#!/usr/bin/env python3
from subprocess import run, PIPE

p = run(['grep', 'f'], stdout=PIPE,
        input='one\ntwo\nthree\nfour\nfive\nsix\n', encoding='ascii')
print(p.returncode)
# -> 0
print(p.stdout)
# -> four
# -> five
# -> 

subprocess.run を使用すると、入力文字列を引数として入力パラメータに直接渡すことができるため、データ通信がより簡単になります。

以上がPython で `subprocess.Popen` と `subprocess.run` に文字列を渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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