ホームページ >バックエンド開発 >Python チュートリアル >文字列を標準入力として subprocess.Popen に渡す方法

文字列を標準入力として subprocess.Popen に渡す方法

Susan Sarandon
Susan Sarandonオリジナル
2024-12-06 13:04:12581ブラウズ

How to Pass a String as stdin to subprocess.Popen?

文字列入力を subprocess.Popen に渡す

StringIO オブジェクトを stdin として subprocess.Popen に渡そうとしているときにエラーが発生しました。オブジェクトは、サブプロセスによって有効なファイルのようなオブジェクトとして認識されません。この問題を解決し、文字列を標準入力として正常に渡すには、まず Popen プロセスへのパイプラインを作成する必要があります。

明示的なパイプライン作成の使用

サブプロセス。 communication()のドキュメントでは、プロセスのstdinにデータを送信するためにstdin=PIPEを指定してパイプラインを作成することを推奨しています。これは、コードを次のように変更することで実現できます。

import subprocess
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())

このコードは、grep プロセスへのパイプを作成し、入力文字列が stdin 引数を介して渡されるようにします。

subprocess.run の使用 (Python 3.5 )

Python バージョン 3.5 およびさらに、subprocess.run を使用すると、1 回の呼び出しで入力を文字列として渡し、出力を文字列として取得できます。

#!/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)
print(p.stdout)

このアプローチは、明示的なパイプライン作成メソッドに代わる簡潔な代替手段となります。

以上が文字列を標準入力として subprocess.Popen に渡す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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