Rohkem
Pythonis shell käskude täitmine
Ma'õpin praegu penetratsioonitestimist ja Python programmeerimist. Ma tahan lihtsalt teada, kuidas ma läheksin Linuxi käsu täitmiseks Pythonis. Käsklused, mida ma tahan täita, on järgmised:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 8080
Kui ma kasutan Pythonis lihtsalt print
ja käivitan selle terminalis, kas see teeb sama, kui seda täita, kui oleks ise sisestanud ja vajutanud Enter?
68
3
Võite kasutada
os.system()
, näiteks nii:Või teie puhul:
Veel parem on kasutada subprocess'i kutset, see on turvalisem, võimsam ja tõenäoliselt ka kiirem:
Või ilma shell'i kutsumata:
Kui soovite väljundi jäädvustada, on üks võimalus seda teha nii:
Ma suurelt soovitan
timeout
i seadistadacommunicate
-sse ja ka tabada erandeid, mida saad selle kutsumisel. See on väga vigaohtlik kood, nii et sa peaksid ootama vigade tekkimist ja neid vastavalt käitlema.https://docs.python.org/3/library/subprocess.html
Esimene käsk lihtsalt kirjutab faili. Sa ei viiks seda täide shell'i käsuna, sest
python
oskab lugeda ja kirjutada failidesse ilma shell'i abita:Käsk
iptables
on midagi sellist, mida te võiksite täita väliselt. Parim viis seda teha on kasutada subprocess moodulit.Pange tähele, et ka see meetod ei kasuta shell'i, mis on ebavajalik lisakulu.
Kiireim viis:
See ei ole kõige paindlikum lähenemine; kui teil on vaja rohkem kontrolli oma protsessi üle kui "käivitage see üks kord, kuni lõpetamiseni ja blokeerige, kuni ta väljub", siis peaksite selle asemel kasutama moodulit
subprocess
.