для 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',])
однако, если вы хотите передать некоторые аргументы команде shell, вы не можете сделать это:
from subprocess import check_call
check_call('ls -al')
вместо этого вы должны передать его в виде списка:
from subprocess import check_call
check_call(['ls', '-al'])
shlex.split()
функция может быть иногда полезно разбить строку в оболочку-подобный синтаксис , прежде чем создавать подпроцессы ... как это:
from subprocess import check_call
import shlex
check_call(shlex.split('ls -al'))
"ntpq -p"
, что является другой частью проблема, о которой вы спрашиваете.