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

时间:2011-05-13 21:32:14

标签: python subprocess

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

start "startup" cmd /k

这会打开一个名为startup的命令shell。我试图自动化的手动过程是在这个shell中输入以下命令: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中执行。我错过了什么?此外,无论shell是设置为True还是False,都会显示命令shell。

2 个答案:

答案 0 :(得分:1)

我在subprocess's document

中发现了此警告
  

警告使用communic()而不是.stdin.write,.stdout.read或.stderr.read来避免因任何其他OS管道缓冲区填满和阻止子进程而导致的死锁。

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

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 :(得分:-1)

这是一个新流程,因此无法直接与Popen沟通。