для Python 2.7+ идиоматического Ответ заключается в использовании subprocess.check_output()
Следует также отметить обработку аргументов при вызове подпроцесса, как это может немного запутаться ....
Если args - единственная команда без собственных аргументов (или у вас есть shell=True
), это может быть строка. В противном случае это должен быть список.
, например ... для вызова команды ls
, это хорошо:
from subprocess import check_call
check_call('ls')
так это:
from subprocess import check_call
check_call(['ls',])
Однако, если вы хотите, чтобы передать некоторые аргументы в команде оболочки , вы не можете это сделать:
from subprocess import check_call
check_call('ls -al')
инов TEAD, вы должны передать его в виде списка:
from subprocess import check_call
check_call(['ls', '-al'])
функция shlex.split()
иногда может быть полезно разбить строку в оболочке, как синтаксис, прежде чем создавать подпроцессы ... как это:
from subprocess import check_call
import shlex
check_call(shlex.split('ls -al'))
Хорошо всегда публиковать фактический код, который вы запускали, и фактический трассировочный или неожиданный bahaviour для конкретных вопросов, подобных этому. Например, я не знаю, что вы пытались сделать, чтобы получить результат, и я подозреваю, что на самом деле вы так далеко не начали, - вы получили бы ошибку в том, что не нашли файл для '' ntpq -p " , что является другой частью проблемы, о которой вы просите. –