para Python 2.7+ la respuesta idiomática es usar subprocess.check_output()
También debe tener en cuenta el manejo de argumentos al invocar un subproceso, ya que puede ser un poco confuso ...
Si args es solo un comando sin ningún argumento propio (o lo ha shell=True
configurado), puede ser una cadena. De lo contrario, debe ser una lista.
por ejemplo ... para invocar el ls
comando, está bien:
from subprocess import check_call
check_call('ls')
asi es esto:
from subprocess import check_call
check_call(['ls',])
sin embargo, si desea pasar algunos argumentos al comando de shell, no puede hacer esto:
from subprocess import check_call
check_call('ls -al')
en su lugar, debe pasarlo como una lista:
from subprocess import check_call
check_call(['ls', '-al'])
La shlex.split()
función a veces puede ser útil para dividir una cadena en una sintaxis tipo shell antes de crear un subproceso ... como este:
from subprocess import check_call
import shlex
check_call(shlex.split('ls -al'))
"ntpq -p"
, que es una parte diferente de el problema del que estás preguntando.