如何用Python控制从.cmd文件打开的命令窗口
有一个文件叫做 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进行交流。