Python

在 Python 中執行 shell 命令

  • September 20, 2020

我目前正在學習滲透測試和 Python 程式。我只想知道如何在 Python 中執行 Linux 命令。我要執行的命令是:

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 8080

如果我只是print在 Python 中使用並在終端中執行它,它是否會像執行它一樣執行它,就好像您自己鍵入並按下一樣Enter

您可以使用os.system(),如下所示:

import os
os.system('ls')

或者在你的情況下:

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')

更好的是,您可以使用 subprocess 的呼叫,它更安全、更強大並且可能更快:

from subprocess import call
call('echo "I like potatos"', shell=True)

或者,不呼叫 shell:

call(['echo', 'I like potatos'])

如果要擷取輸出,一種方法如下:

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))

強烈建議設置一個timeoutin communicate,並擷取呼叫它時可能遇到的異常。這是一個非常容易出錯的程式碼,因此您應該預期會發生錯誤並相應地處理它們。

https://docs.python.org/3/library/subprocess.html

引用自:https://unix.stackexchange.com/questions/238180