我想读取子进程的标准输出的第一个字节,以了解它已经开始运行。之后我想丢弃所有进一步的输出,这样我就不必担心缓冲区了。
最好的方法是什么?
澄清:我希望子进程继续与我的程序一起运行,我不想等待它终止或类似的事情。理想情况下,有一些简单的方法可以做到这一点,而无需使用 threading
、fork
ing 或 multiprocessing
。
如果我忽略输出流,或者 .close()
它,如果它发送的数据多于缓冲区可以容纳的数据,则会导致错误。
最佳答案
如果您使用的是 Python 3.3+,您可以使用 stdout
和 stderr
的 DEVNULL
特殊值来丢弃子进程输出。
from subprocess import Popen, DEVNULL
process = Popen(["mycmd", "myarg"], stdout=DEVNULL, stderr=DEVNULL)
或者,如果您使用的是 Python 2.4+,您可以使用以下方法进行模拟:
import os
from subprocess import Popen
DEVNULL = open(os.devnull, 'wb')
process = Popen(["mycmd", "myarg"], stdout=DEVNULL, stderr=DEVNULL)
但是这并没有让您有机会读取标准输出的第一个字节。
关于python - 如何读取子进程标准输出的第一个字节,然后在 Python 中丢弃其余字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5495078/