В чем проблема с выполнением команд в Windows CMD из Python? - PullRequest
0 голосов
/ 10 марта 2011

У меня огромные проблемы с передачей команд CMD из Python.

Сначала я открываю процесс CMD:

    cmdprocess = subprocess.Popen("cmd",
                                  stdin  = subprocess.PIPE,
                                  stdout = subprocess.PIPE,
                                  stderr = subprocess.PIPE)

Затем я что-то делаю, например:

for i in range(500):
     #time.sleep(1)
     command = ("dir > " + os.path.join("C:\\", str(i)) + "\r\n").encode("utf-8")
     print(command)
     cmdprocess.stdin.write(command)

Итак, предполагается создать 500 небольших текстовых файлов в папке.Я протестировал его в Python 3.2 x64 и 3.2 x86, и результат для обоих: он насчитывает примерно 250-350 в оболочке Python, а затем просто останавливается.Нет ошибок, ничего.Затем в указанной папке находятся файлы 1-80.

Теперь я подумал, что, возможно, Python слишком быстр, и поэтому он имел sleep(1) в течение 1 секунды между командами.Теперь он насчитывает около 200, прежде чем первый файл появится в папке!и затем останавливается на отметке 270.

Что здесь происходит и как я могу заставить CMD немедленно выполнить команду?

Ответы [ 2 ]

3 голосов
/ 10 марта 2011

Вы обрабатываете вывод в ТРУБАХ? Они могут быть наполнением. Если вы заполните буфер stdout или stderror из процесса, он остановит выполнение.

1 голос
/ 10 марта 2011

Я думаю, вам лучше использовать пакет pywin32.Есть модули win32pipe и win32process.У меня тоже была такая же проблема, но я не смог ее решить без pywin32-site-package ... Так что теперь я использую их ... Если вам нужен пример кода и вы используете Windows, я присоединю его.если вы имеете в виду Linux ... это то же самое, но вам нужен еще один, как IO select.

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