【问题标题】:How to manipulate cmd.exe from python, so that the output is shown in the cmd.exe window如何从 python 操作 cmd.exe,使输出显示在 cmd.exe 窗口中
【发布时间】:2013-12-26 15:58:00
【问题描述】:

我想使用 python 打开 cmd.exe,然后依次发送几个命令到 cmd.exe 并在同一个 cmd.exe 窗口中查看输出。我怎样才能做到这一点? 使用以下代码不会在 cmd.exe 窗口中显示输出。

proc = subprocess.Popen("cmd", creationflags=subprocess.CREATE_NEW_CONSOLE)
proc.communicate("dir\n")

【问题讨论】:

  • 您希望 stdin 来自您的 Python 脚本,但 stdout 会转到新的控制台窗口(python 脚本不在同一个窗口中)。这是正确的吗?为什么需要它(您能否提供更多上下文)? Have you considered to use a GUI instead? 这是一个关于如何 show subprocess output continiusly in a GUI (using tkinter) 的示例,你有完整的命令列表还是交互式的?
  • @J.F.Sebastian 我正在从我的 python 程序中调用 curl。 Curl 在工作时会输出一个不错的加载栏,所以我想重用它。 Curl 通常不附带 windows,所以我单独安装了它。我的程序是一种简单的下载管理器。
  • @J.F.Sebastian 我尝试了您的第二个链接,但未能在 gui 窗口中显示 curl 输出。
  • failed to show 信息量不是很大。我的猜测是 curl 使用 stderr 打印进度,但示例捕获了命令的标准输出。

标签: python cmd subprocess


【解决方案1】:

您需要指定stdin=subprocess.PIPE, stdout=subprocess.PIPE。 (如果你想捕获标准错误输出,也可以指定stderr=subprocess.PIPE)。否则,Popen.communicate 无法将输入发送到子进程,也无法获得输出。

import subprocess
proc = subprocess.Popen("cmd", stdin=subprocess.PIPE, stdout=subprocess.PIPE, creationflags=subprocess.CREATE_NEW_CONSOLE)
out, err = proc.communicate("dir\n" "cd ..\n" "dir\n")
# `Popen.communicate` returns a tuple of (standard output, standard error)
print(out)

【讨论】:

  • 谢谢,但这不会在 cmd.exe 窗口中显示输出。
  • @Sunny88,我得到了命令的输出。如果您运行我的答案中的代码,您会得到什么?
  • 我得到了输出,但它是写在运行 python 脚本的控制台中,而不是在程序产生的 cmd.exe 窗口中。
猜你喜欢
  • 1970-01-01
  • 2022-01-20
  • 2020-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-22
  • 1970-01-01
相关资源
最近更新 更多