您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何从Python脚本捕获Python解释器和/或CMD.EXE的输出?

如何从Python脚本捕获Python解释器和/或CMD.EXE的输出?

如果您正在谈论的是脚本的“父级” python解释器或CMD.exe,那么不可能,这是不可能的。在每个类似POSIX的系统中(似乎现在您正在运行Windows,并且可能有一些我不知道的怪癖,YMMV),每个进程都有三个流,标准输入,标准输出和标准错误。Bu认(在控制台中运行时)将定向到控制台,但是可以使用管道符号进行重定向

python script_a.py | python script_b.py

这将脚本a的标准输出流与脚本B的标准输入流联系在一起。在此示例中,标准错误仍然传递给控制台。请参阅Wikipedia上有关标准流文章

如果您正在谈论子进程,则可以像这样从python启动它(如果需要双向通信,stdin也可以选择):

import subprocess
# Of course you can open things other than python here :)
process = subprocess.Popen(["python", "main.py"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
x = process.stderr.readline()
y = process.stdout.readline()
process.wait()

有关管理流程的信息,请参见Python子流程模块。为了进行通信,将process.stdin和process.stdout管道视为标准文件对象

对于管道,从lassevk的标准输入中读取建议您执行以下操作:

import sys
x = sys.stderr.readline()
y = sys.stdin.readline()

sys.stdin和sys.stdout是上述在sys模块中定义的标准文件对象。您可能还想看看模块。

在我的示例中,使用readline()读取数据是一种非常幼稚的获取数据的方式。如果输出不是面向行的或不确定的,则可能要调查轮询,不幸的是,该轮询无法在Windows中运行,但是我敢肯定还有其他选择。

python 2022/1/1 18:47:19 有343人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶