当前位置: 首页 > 面试题库 >

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

鲍永春
2023-03-14
问题内容
  1. 是否可以从Python脚本捕获Python解释器的输出?
  2. 是否可以从Python脚本捕获Windows CMD的输出?

如果是这样,我应该研究哪个librar(y | ies)?


问题答案:

如果您正在谈论的是脚本的“父级”
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中运行,但是我敢肯定还有其他选择。



 类似资料:
  • 这里的目标是使用docker容器作为安全沙箱,在中运行不受信任的python脚本,但要使用docker py模块从python内部执行此操作,并能够捕获该脚本的输出。 我正在docker容器中运行python脚本foo.py(它在docker文件中被设置为命令,因此它会在容器运行后立即执行),无法捕获该脚本的输出。当我通过普通CLI使用 (是包含foo.py的目录)我得到了打印到stdout的fo

  • 问题内容: 我正在尝试从Python内部进行比特币付款。在bash中,我通常会这样做: 因此,例如: 如果成功,我会得到一个交易ID作为输出,但是如果我尝试转账大于我的比特币余额的金额,则会得到以下输出: 现在,在我的Python程序中,我尝试按以下方式进行付款: 如果有足够的余额,则可以正常工作,但是如果没有足够的余额,则会输出以下内容: 它不包括我在命令行中得到的错误。所以我的问题是;如何从P

  • 问题内容: 我从PHP脚本执行Python脚本时遇到问题。我的客户端使用Bluehost,因此我使用在此描述的easy_install方法为Python安装了第三方模块(numpy):https ://my.bluehost.com/cgi/help/530?step = 530 为了演示我的问题,我创建了两个python脚本和一个PHP脚本。 hello.py包含: hello-numpy.py

  • 问题内容: 我试图在Windows 7计算机上设置python 2.7.6(首先安装了python 3.3.3)。将项目解释器添加到settings- project解释器后,选择项目解释器时,出现此错误 文件“ C:\ Python33 \ Lib \ site.py”,行173 file = sys.stderr)^ SyntaxError:语法无效 最初在设置页面中添加python 2.7解

  • 问题内容: 我正在使用对对象执行某些操作的Python库 并更改它。这样做时,它会向stdout打印一些统计信息,我希望掌握这些信息。正确的解决方案是更改以返回相关信息, 但是开发人员需要一段时间才能解决此问题。作为一种解决方法,我考虑过解析对stdout的任何写入。 如何捕获代码中两点之间的stdout输出,例如 ? 问题答案: 试试这个上下文管理器: 用法: 现在是一个包含函数调用打印的行的列

  • 问题内容: 我正在尝试提取git分支并在我的Jenkinsfile中提交信息,如下所示: 我想以后像这样打印它: 我没有得到真正的价值,而是这样: 我做错了什么,如何正确获取需要的值? 编辑:不,建议的重复项不是答案,因为我知道用于检索所需信息的shell命令。我的问题是信息传递给我的方式,而不是。 问题答案: 这个完整的管道对您有用吗?使用管道插件2.4为我工作。