Daugiau
"Python" apvalkalo komandų vykdymas
Šiuo metu studijuoju įsiskverbimo testavimą ir "Python" programavimą. Noriu sužinoti, kaip man reikėtų vykdyti "Linux" komandą "Python" kalba. Komandos, kurias noriu įvykdyti, yra šios:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 8080
Jei tiesiog panaudosiu print
Python ir paleisiu ją terminale, ar ji bus įvykdyta taip pat, lyg ją rašytum pats ir spaustum Enter?
68
3
Galite naudoti
os.system()
, pavyzdžiui, taip:Arba jūsų atveju:
Dar geriau, galite naudoti subproceso iškvietimą, jis saugesnis, galingesnis ir greičiausiai greitesnis:
Arba nesikreipiant į apvalkalą:
Jei norite užfiksuoti išvestį, vienas iš būdų tai padaryti yra toks:
Labai rekomenduoju
komunikacijoje
nustatytitimeout
, taip pat fiksuoti išimtis, kurias galite gauti ją iškvietę. Tai labai į klaidas linkęs kodas, todėl turėtumėte tikėtis, kad klaidų pasitaikys, ir atitinkamai jas tvarkyti.https://docs.python.org/3/library/subprocess.html
Pirmoji komanda tiesiog įrašo į failą. Jos nevykdytumėte kaip apvalkalo komandos, nes
python
gali skaityti ir rašyti į failus be apvalkalo pagalbos:Komandą
iptables
galbūt norėsite vykdyti išoriškai. Geriausias būdas tai padaryti - naudoti subproceso modulį.Atkreipkite dėmesį, kad šis būdas taip pat nenaudoja apvalkalo, o tai yra nereikalingos pridėtinės išlaidos.
Greičiausias būdas:
Tai nėra pats lanksčiausias būdas; jei jums reikia daugiau proceso kontrolės, nei "paleisti jį vieną kartą iki galo ir blokuoti, kol jis baigsis", tuomet turėtumėte naudoti
subproceso
modulį.