Я пробовал что-то вроде этого, но без эффекта:
command = "cmd.exe"
proc = subprocess.Popen(command, stdin = subprocess.PIPE, stdout = subprocess.PIPE)
proc.stdin.write("dir c:\\")
Я пробовал что-то вроде этого, но без эффекта:
command = "cmd.exe"
proc = subprocess.Popen(command, stdin = subprocess.PIPE, stdout = subprocess.PIPE)
proc.stdin.write("dir c:\\")
Вероятно, вы захотите попробовать что-то вроде этого:
command = "cmd.exe /C dir C:\\"
Я не думаю, что вы можете подключиться к cmd.exe
... Если вы исходите из фона unix, ну, cmd.exe
имеет некоторые уродливые бородавки!
РЕДАКТИРОВАТЬ: По словам Свена Марнача, вы можете перейти на cmd.exe
. Я пробовал следовать в оболочке python:
>>> import subprocess
>>> proc = subprocess.Popen('cmd.exe', stdin = subprocess.PIPE, stdout = subprocess.PIPE)
>>> stdout, stderr = proc.communicate('dir c:\\')
>>> stdout
'Microsoft Windows [Version 6.1.7600]\r\nCopyright (c) 2009 Microsoft Corporatio
n. All rights reserved.\r\n\r\nC:\\Python25>More? '
Как вы можете видеть, у вас все еще есть небольшая работа (только первая строка возвращается), но вы могли бы заставить это работать...
как насчет просто:
import os
os.system('dir c:\\')
Попробуйте добавить вызов к proc.stdin.flush()
после записи в канал и посмотреть, начнут ли дела вести себя больше, как вы ожидаете. Явная промывка трубы означает, что вам не нужно беспокоиться о том, как именно настроена буферизация.
Кроме того, не забудьте включить "\n"
в конце вашей команды, или ваша дочерняя оболочка будет сидеть там в строке, ожидающей завершения ввода команды.
Я написал об использовании Popen для более эффективного управления экземпляром внешней оболочки: Выполнение трех команд в том же процессе с Python
Как и в этом вопросе, этот трюк может быть ценным, если вам нужно поддерживать состояние оболочки через несколько вызовов вне процесса на машине Windows.
Try:
import os
os.popen("Your command here")
Почему вы хотите вызвать cmd.exe
? cmd.exe
- это командная строка (shell). Если вы хотите изменить каталог, используйте os.chdir("C:\\")
. Старайтесь не вызывать внешние команды, если Python может его предоставить. Фактически, большинство команд операционной системы предоставляются через модуль os
(и sys). Я предлагаю вам ознакомиться с документацией модуля os
, чтобы просмотреть доступные методы.