Udfør shell-kommandoer i Python
Jeg studerer i øjeblikket penetration testing og Python-programmering. Jeg vil bare gerne vide, hvordan jeg kan udføre en Linux-kommando i Python. De kommandoer, jeg ønsker at udføre, er:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 8080
Hvis jeg bare bruger print
i Python og kører det i terminalen, vil det gøre det samme som at udføre det, som hvis du skrev det selv og trykkede Enter?
68
3
Du kan bruge
os.system()
, som her:Eller i dit tilfælde:
Bedre endnu, du kan bruge subprocess's call, det er mere sikkert, mere kraftfuldt og sandsynligvis hurtigere:
Eller, uden at påkalde shell:
Hvis du ønsker at opsamle output, kan du gøre det på følgende måde:
Jeg anbefaler højest* at sætte en
timeout
icommunicate
, og også at fange de undtagelser du kan få når du kalder den. Dette er en meget fejlbehæftet kode, så du bør forvente, at der vil ske fejl, og håndtere dem i overensstemmelse hermed.https://docs.python.org/3/library/subprocess.html
Den første kommando skriver blot til en fil. Du ville ikke udføre den som en shell-kommando, fordi
python
kan læse og skrive til filer uden hjælp fra en shell:Kommandoen
iptables
er noget, du måske vil udføre eksternt. Den bedste måde at gøre dette på er at bruge subprocess module.Bemærk, at denne metode heller ikke bruger en shell, hvilket er unødvendigt overhead.
Den hurtigste måde:
Dette er ikke den mest fleksible fremgangsmåde; hvis du har brug for mere kontrol over din proces end "kør den én gang, til den er færdig, og blokér indtil den afsluttes", så bør du bruge
subprocess
-modulet i stedet.