python - 如何读取子进程标准输出的第一个字节,然后在 Python 中丢弃其余字节?

标签 python stream subprocess

我想读取子进程的标准输出的第一个字节,以了解它已经开始运行。之后我想丢弃所有进一步的输出,这样我就不必担心缓冲区了。

最好的方法是什么?

澄清:我希望子进程继续与我的程序一起运行,我不想等待它终止或类似的事情。理想情况下,有一些简单的方法可以做到这一点,而无需使用 threadingforking 或 multiprocessing

如果我忽略输出流,或者 .close() 它,如果它发送的数据多于缓冲区可以容纳的数据,则会导致错误。

最佳答案

如果您使用的是 Python 3.3+,您可以使用 stdoutstderrDEVNULL 特殊值来丢弃子进程输出。

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/

相关文章:

python - 在没有重叠的情况下查找时间序列数据中的总持续时间

python - 如何为 celery 和 prometheus 生成自定义应用程序指标/监控

iphone - 使用 NSStream 与 PHP 通信?

python - 从 Python 中的 imagemagick 子进程读取输出

python - 使用 subprocess.run 运行 Snakemake

Python:WAITING用户输入或回调,以先到者为准

python - 无法在 pypi.org 上更新我的包

javascript - Koa2 - 如何写入响应流?

javascript - 解析 JSON 流

python2.7 使用调试的行为与不使用调试的行为不同