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

标签 python windows cmd

  1. 是否可以从 Python 脚本中捕获 Python 解释器的输出?
  2. 是否可以从 Python 脚本中捕获 Windows CMD 的输出?

如果是这样,我应该查看哪个图书馆(y|ies)?

最佳答案

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

python script_a.py | python script_b.py

这将脚本 a 的标准输出流与脚本 B 的标准输入流联系起来。在此示例中,标准错误仍会转到控制台。请参阅有关 standard streams 的文章在维基百科上。

如果你在谈论一个子进程,你可以像这样从 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 subprocess管理流程信息的模块。对于通信,process.stdin 和 process.stdout 管道被认为是标准的 file objects .

与管道一起使用,从标准输入读取为 lassevk建议你做这样的事情:

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

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

在我的示例中使用 readline() 读取数据是一种非常天真的获取数据的方式。如果输出不是面向行的或不确定的,您可能需要查看 polling不幸的是,它在 Windows 中不起作用,但我确信那里有一些替代方案。

关于python - 如何从 Python 脚本捕获 Python 解释器和/或 CMD.EXE 输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24931/

相关文章:

python - 安装YCM报错: python site module not loaded

python - 查找嵌套列表中元素的索引

Python 2.x 字符串 : Unicode vs. 字节

javascript - Gulp/Node.js 错误 : connect ECONNREFUSED

c++ - 将 .bat 转换为 .exe 而不依赖于 cmd.exe

python - urllib.request.urlopen 不接受带空格的查询字符串

c++ - winapi - 如何正确使用 LayeredWindows

windows - Git svn 不使用 svn 凭据

c# - 如何在不同的 CPU 内核上生成线程?

java - 如何在 Java 中运行 CMD