非常に具体的な質問 (希望):次の 3 つのコードの違いは何ですか?
(最初のプロセスは子プロセスが終了するのを待たず、2 番目と 3 番目のプロセスは終了するだけだと思います。しかし、これが唯一の違いであることを確認する必要があります...)
他の意見や提案も歓迎します (ただし、shell=True
危険性とクロスプラットフォームの制限については十分に認識しています) 。
Python サブプロセス インタラクションを既に読んでいることに注意してください。なぜ私のプロセスは Popen.communicate で動作するのに、Popen.stdout.read() で動作しないのですか? そして、後でプログラムとやり取りしたくない/する必要がないこと。
また、既にPython Popen.communicate() メモリ制限の代替案を読んでいることにも注意してください。しかし、私は本当にそれを理解していませんでした...
最後に、1つの方法を使用して1つのバッファが1つの出力で満たされると、どこかでデッドロックのリスクがあることを認識していますが、インターネットで明確な説明を探している間に迷子になりました...
最初のコード:
from subprocess import Popen, PIPE
def exe_f(command='ls -l', shell=True):
"""Function to execute a command and return stuff"""
process = Popen(command, shell=shell, stdout=PIPE, stderr=PIPE)
stdout = process.stdout.read()
stderr = process.stderr.read()
return process, stderr, stdout
2 番目のコード:
from subprocess import Popen, PIPE
from subprocess import communicate
def exe_f(command='ls -l', shell=True):
"""Function to execute a command and return stuff"""
process = Popen(command, shell=shell, stdout=PIPE, stderr=PIPE)
(stdout, stderr) = process.communicate()
return process, stderr, stdout
3 番目のコード:
from subprocess import Popen, PIPE
from subprocess import wait
def exe_f(command='ls -l', shell=True):
"""Function to execute a command and return stuff"""
process = Popen(command, shell=shell, stdout=PIPE, stderr=PIPE)
code = process.wait()
stdout = process.stdout.read()
stderr = process.stderr.read()
return process, stderr, stdout
ありがとう。