kanta's spike

Pythonで外部プロセスを実行し、その外部プロセスの標準入力を使って、Pythonから情報を与えたい。

例えば、以下のように外部プロセスcat -に対して、text.txtの内容をPython経由で、cat -に渡したい。

cat - < test.txt

解決策

subprocess.Popen()で外部プロセスを起動し、Popen.communicate(input)を使って、外部プロセスの標準入力に値を渡せば良い。

以下は、cat -に対して、標準入力からtest1\ntest2\ntest3を渡している。

# spike.py
import subprocess


def main():
    proc = subprocess.Popen(
        "cat - ",
        shell=True,
        stdin=subprocess.PIPE,
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,
        text=True,
    )

    stdout, stderr = proc.communicate("test1\ntest2\ntest3")
    if stdout:
        print("stdout:")
        print(stdout)
    if stderr:
        print("stderr:")
        print(stderr)


if __name__ == "__main__":
    main()

実行結果は以下となる。

$ python spike.py
stdout:
test1
test2
test3

参考

作成日: 2024/01/16