Как выполнить команду командной строки из python

Я пробовал что-то вроде этого, но без эффекта:

command = "cmd.exe"
proc = subprocess.Popen(command, stdin = subprocess.PIPE, stdout = subprocess.PIPE)
proc.stdin.write("dir c:\\")

Ответ 1

Вероятно, вы захотите попробовать что-то вроде этого:

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? '

Как вы можете видеть, у вас все еще есть небольшая работа (только первая строка возвращается), но вы могли бы заставить это работать...

Ответ 2

как насчет просто:

import os
os.system('dir c:\\')

Ответ 3

Попробуйте добавить вызов к proc.stdin.flush() после записи в канал и посмотреть, начнут ли дела вести себя больше, как вы ожидаете. Явная промывка трубы означает, что вам не нужно беспокоиться о том, как именно настроена буферизация.

Кроме того, не забудьте включить "\n" в конце вашей команды, или ваша дочерняя оболочка будет сидеть там в строке, ожидающей завершения ввода команды.

Я написал об использовании Popen для более эффективного управления экземпляром внешней оболочки: Выполнение трех команд в том же процессе с Python

Как и в этом вопросе, этот трюк может быть ценным, если вам нужно поддерживать состояние оболочки через несколько вызовов вне процесса на машине Windows.

Ответ 4

Try:

import os

os.popen("Your command here")

Ответ 5

Почему вы хотите вызвать cmd.exe? cmd.exe - это командная строка (shell). Если вы хотите изменить каталог, используйте os.chdir("C:\\"). Старайтесь не вызывать внешние команды, если Python может его предоставить. Фактически, большинство команд операционной системы предоставляются через модуль os (и sys). Я предлагаю вам ознакомиться с документацией модуля os, чтобы просмотреть доступные методы.