如何用Python控制从.cmd文件打开的命令窗口

0 投票
2 回答
1174 浏览
提问于 2025-04-16 17:36

有一个文件叫做 startup.cmd,它的作用是设置一些环境变量,运行一些准备命令,然后执行:

start "startup" cmd /k

这会打开一个名为 startup 的命令窗口。我想要自动化的手动过程是,在这个窗口里输入以下命令:get startup.xml。我认为在 Python 中正确的做法应该是这样的:

import subprocess

p = subprocess.Popen('startup.cmd', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)

getcommand = 'get startup.xml'
servercommand = 'startserver'
p.stdin.write(getcommand)
p.stdin.write(startserver)
(stdoutdata, stderrdata) = p.communicate()
print stdoutdata
print stderrdata

但是这些命令在这个窗口里似乎没有执行。请问我漏掉了什么吗?另外,无论 shell 设置为 True 还是 False,这个命令窗口都会出现。

2 个回答

1

我在subprocess的文档中发现了这个警告,

警告:使用 communicate() 方法,而不是 .stdin.write、.stdout.read 或 .stderr.read,这样可以避免因为其他操作系统的管道缓冲区满了而导致的死锁,从而阻塞子进程。

所以我的建议是,使用 communicate 来发送你的命令。

import subprocess

p = subprocess.Popen('startup.cmd', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)

command = 'get startup.xml\n'
command += 'startserver\n'
(stdoutdata, stderrdata) = p.communicate(command)
print stdoutdata
print stderrdata
-1

这是一个新的过程,所以不能直接和Popen进行交流。

撰写回答