【问题标题】:Send commands to cmd prompt using Python subprocess module使用 Python 子进程模块向 cmd 提示符发送命令
【发布时间】:2021-09-30 13:56:16
【问题描述】:

使用 python 3.7

我有以下问题:我编写了一个 python 脚本,在其中我打开一个 cmd 提示符,执行一些操作,然后我想向打开的 cmd 提示符发送一些命令

为了简化,它看起来像:

import subprocess
process = subprocess.Popen(['start','cmd','/k','dir'], shell = True, stdin= subprocess.PIPE, 
stdout = subprocess.PIPE, text = True)

"DO some actions"

input = 'date'
process.stdin.write(input)
process.communicate(input, timeout = 10)

脚本总是以 TimeoutExpired 异常退出,并且在 cmd 提示符下我没有看到写入的命令(输入)

我查看了文档,但我是 python 新手,不太了解如何使用 subprocess 模块

感谢您的支持!

【问题讨论】:

  • 为什么要开始这个过程?你在那里跑什么?
  • 这里有两个问题:1)通过start间接启动cmd,你创建了一个你无法控制的命令窗口; 2) 由于您没有以换行符结束“日期”字符串,因此您实际上并没有执行命令。
  • 嗨 Balderman,我的想法是我必须打开一个 .exe 文件,并且在不同的时间我必须在打开的窗口上写一些命令。我用 cmd 提示符 i 简化了这个问题,我首先发送一个 dir 命令,然后我想向同一个 cmd 窗口发送一个新命令(日期)。我不知道该怎么做。
  • 嗨@jasonharper,有没有办法控制那个cmd窗口?
  • 是的,直接启动cmd,而不是要求start为您启动它。

标签: python subprocess


【解决方案1】:

如果您想在另一个 cmd 选项卡中写类似 date 的内容,请执行以下操作:

import subprocess
input = 'date'
subprocess.Popen(['start','cmd','/k','echo',input], shell = True, stdin = subprocess.PIPE, stdout = subprocess.PIPE, text = True)

结果:

【讨论】:

  • 嗨 Behdad,第二个命令输入('date')没有发送到 opned 命令提示符。在命令提示符下,您只能看到 dir 命令的结果。我也从 IDE 运行代码,而不是在 cmd 提示符下。
  • 我已经更新了我的答案,请查看@Costi
  • 嗨@Behdad,这不是我想要的。我的脚本将打开 cmd 提示符,我将执行一些操作,然后我想向该打开的 cmd 提示符发送一些命令。
猜你喜欢
  • 2012-07-30
  • 2013-07-30
  • 2019-05-25
  • 2018-05-08
  • 2012-05-22
  • 2012-05-16
  • 2013-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多