相关疑难解决方法(0)

python中subprocess.PIPE上的非阻塞读取

我正在使用子进程模块启动子进程并连接到它的输出流(stdout).我希望能够在其标准输出上执行非阻塞读取.有没有办法让.readline非阻塞或在我调用之前检查流上是否有数据.readline?我希望这是可移植的,或至少在Windows和Linux下工作.

这是我现在如何做到的(.readline如果没有数据可用,则阻止它):

p = subprocess.Popen('myprogram.exe', stdout = subprocess.PIPE)
output_str = p.stdout.readline()
Run Code Online (Sandbox Code Playgroud)

python io subprocess nonblocking

477
推荐指数
15
解决办法
21万
查看次数

从subprocess.communicate()读取流输入

我正在使用Python subprocess.communicate()来从一个运行大约一分钟的进程中读取stdout.

如何stdout以流式方式打印出该流程的每一行,以便我可以看到生成的输出,但在继续之前仍然阻止流程终止?

subprocess.communicate() 似乎立刻提供所有输出.

python subprocess

75
推荐指数
3
解决办法
7万
查看次数

使用 python 子进程 Popen 的非阻塞输出流

我想知道是否有任何方法可以处理非阻塞的情况以及从 python 子进程流式传输stdoutstderr的情况。我已经通过这个网站浏览了几篇文章,但没有一篇文章能回答这种情况。它要么通过在另一个线程中运行读取来显示,以便主线程不受影响(或)只是如何从进程中流式传输数据。我的问题是两者的结合。我想问题出在read()readline()因为它们在输出流期间以一种或另一种方式阻塞。

我想要一个可流式传输的对象,这是我的主要关注点。我附上我已经通过的参考资料以供进一步参考。

script_process = subprocess.Popen(command_sequence[i],preexec_fn=os.setsid, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    while script_process.poll() is None:
       for output in iter(lambda: script_process.stdout.readline(), b''):
           sys.stdout.writelines(output)
Run Code Online (Sandbox Code Playgroud)

python中子进程的非阻塞读取.PIPE

从子进程标准输出可靠的非阻塞读取

从需要 stdin 的子进程实时打印 stdout

在进程运行时不断打印子进程输出

是否可以将 python 子进程的输出实时流式传输到网页?

如何从`stdin`创建非阻塞连续读取?

python subprocess stdout popen

5
推荐指数
0
解决办法
1861
查看次数

标签 统计

python ×3

subprocess ×3

io ×1

nonblocking ×1

popen ×1

stdout ×1