Python Script ejecuta comandos en la Terminal


109

Leí esto en alguna parte hace un tiempo pero parece que no puedo encontrarlo. Estoy tratando de encontrar un comando que ejecute comandos en el terminal y luego genere el resultado.

Por ejemplo: el guión será:

command 'ls -l'

Saldrá el resultado de ejecutar ese comando en la terminal

Respuestas:


198

Hay varias formas de hacer esto:

Una forma sencilla es usar el módulo os:

import os
os.system("ls -l")

Se pueden lograr cosas más complejas con el módulo de subproceso: por ejemplo:

import subprocess
test = subprocess.Popen(["ping","-W","2","-c", "1", "192.168.1.70"], stdout=subprocess.PIPE)
output = test.communicate()[0]

43
No quiero menospreciarte, pero. Deberías usar subproceso para todo. Es mucho más seguro. subprocess.call () le proporcionará una interfaz agradable para reemplazar el formulario de llamada simple.
Jorge Vargas

Gracias por esa respuesta amigo. Usaré Python para mi primera aplicación en el escritorio de Ubuntu, esto realmente me ayudará.
LinuxBill

1
¿Cómo puedo obtener la respuesta completa de un comando? os.system("nslookup gmail.com")Solo devuelve la última línea 0, pero quiero obtener la respuesta completa.
Parthapratim Neog

3
@JorgeVargas ¿Puedes ayudarme a entender por qué se debe usar el subproceso para todo? ¿Por qué es más seguro?
Soutzikevich

38

Prefiero el uso del módulo de subproceso:

from subprocess import call
call(["ls", "-l"])

La razón es que si desea pasar alguna variable en el script, esto le brinda una forma muy fácil, por ejemplo, tome la siguiente parte del código

abc = a.c
call(["vim", abc])

Me funcionó bien al abrir una imagen con parámetros adicionalescall(["eog", "1breeproposal.png", "-f"])
Josh


4

También deberías mirar en los comandos.getstatusoutput

Esto devuelve una tupla de longitud 2. El primero es el entero devuelto (0 - cuando los comandos son exitosos) el segundo es la salida completa como se mostrará en la terminal.

Para ls

    import commands
    s=commands.getstatusoutput('ls')
    print s
    >> (0, 'file_1\nfile_2\nfile_3')
    s[1].split("\n")
    >> ['file_1', 'file_2', 'file_3']

2
import os
os.system("echo 'hello world'")

Esto debería funcionar. No sé cómo imprimir la salida en Python Shell.



1

Jupyter

En un cuaderno jupyter puede utilizar la función mágica !

!echo "execute a command"
files = !ls -a /data/dir/ #get the output into a variable

ipython

Para ejecutar esto como un .pyscript, necesitaría usaripython

files = get_ipython().getoutput('ls -a /data/dir/')

ejecutar script

$ ipython my_script.py

0

Puede importar el módulo 'os' y usarlo así:

import os
os.system('#DesiredAction')

0

para python3 use subproceso

import subprocess
s = subprocess.getstatusoutput(f'ps -ef | grep python3')
print(s)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.