Как управлять командным окном, открытым из файла .cmd с помощью Python - PullRequest
0 голосов
/ 14 мая 2011

Существует файл с именем 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

Но эти команды, похоже, не выполняются в оболочке.Что мне не хватает?Кроме того, командная оболочка отображается независимо от того, установлена ​​ли для нее значение True или False.

Ответы [ 2 ]

1 голос
/ 14 мая 2011

Я нашел это предупреждение в документе подпроцесса ,

Предупреждение Используйте функцию connect () вместо .stdin.write, .stdout.read или .stderr.read, чтобы избежать взаимных блокировок из-за заполнения других буферов буфера ОС и блокировки дочернего процесса.

Поэтому я предлагаю использовать связь для отправки вашей команды.

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
0 голосов
/ 26 мая 2011

Это новый процесс, поэтому нельзя напрямую общаться с Попеном.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...