Puoi usare os.system()
, in questo modo:
import os
os.system('ls')
O nel tuo caso:
os.system('echo 1 > /proc/sys/net/ipv4/ip_forward')
os.system('iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 8080')
Meglio ancora, puoi usare la chiamata del sottoprocesso, è più sicura, più potente e probabilmente più veloce:
from subprocess import call
call('echo "I like potatos"', shell=True)
Oppure, senza invocare la shell:
call(['echo', 'I like potatos'])
Se vuoi catturare l'output, un modo per farlo è come questo:
import subprocess
cmd = ['echo', 'I like potatos']
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
o, e = proc.communicate()
print('Output: ' + o.decode('ascii'))
print('Error: ' + e.decode('ascii'))
print('code: ' + str(proc.returncode))
I altamente consigliabile impostare un timeout
a communicate
, e anche per catturare le eccezioni che si possono ottenere quando si chiama esso. Questo è un codice molto soggetto a errori, quindi dovresti aspettarti che si verifichino errori e gestirli di conseguenza.
https://docs.python.org/3/library/subprocess.html