Ejecutar comandos del shell en Python
Actualmente estoy estudiando pruebas de penetración y programación en Python. Quiero saber cómo haría para ejecutar un comando de Linux en Python. Los comandos que quiero ejecutar son:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 8080
Si simplemente uso print
en Python y lo ejecuto en la terminal, ¿hará lo mismo que ejecutarlo como si lo escribiera uno mismo y pulsara Enter?
68
3
Puedes usar
os.system()
, así:O en tu caso:
Mejor aún, puedes usar la llamada del subproceso, es más segura, más potente y probablemente más rápida:
O bien, sin invocar el shell:
Si quieres capturar la salida, una forma de hacerlo es así
Recomiendo altamente establecer un
timeout
encommunicate
, y también capturar las excepciones que puedas obtener al llamarlo. Este es un código muy propenso a errores, por lo que debes esperar que estos ocurran y manejarlos en consecuencia.https://docs.python.org/3/library/subprocess.html
El primer comando simplemente escribe en un archivo. Usted no ejecutaría eso como un comando de la shell porque
python
puede leer y escribir en archivos sin la ayuda de una shell:El comando
iptables
es algo que puede querer ejecutar externamente. La mejor manera de hacerlo es utilizar el módulo de subproceso.Tenga en cuenta que este método tampoco utiliza un shell, lo que supone una sobrecarga innecesaria.
La forma más rápida:
Este no es el enfoque más flexible; si necesita más control sobre su proceso que "ejecutarlo una vez, hasta su finalización, y bloquearlo hasta que salga", entonces debería usar el módulo "subproceso" en su lugar.