有一个名为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。
答案 0 :(得分:1)
警告使用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沟通。