subprocess
模塊和 os.system
或 os.popen
等函數相比,功能更為強大和靈活,是 Python 官方推薦的執行系統命令的方法。主要的優勢包括:
-
更強的錯誤處理:
subprocess
模塊可以更精細地控制錯誤輸出和錯誤代碼,而os.system
只返回一個狀態碼。 -
更好的輸出控制:
subprocess
可以獲取命令的標準輸出和錯誤輸出,可以很方便地用于進一步處理。 -
更安全:
subprocess
通過列表的形式傳遞命令和參數,避免了 shell 注入攻擊的風險。而os.system
可能因為字符串拼接而產生安全問題。 -
更多功能:
subprocess
還支持更多高級功能,例如輸入/輸出重定向、環境變量控制、進程管道等。
因此,如果需要在 Python 中執行系統命令,推薦優先使用 subprocess
模塊。
示例
import subprocesscommand = 'ssh node "cd /home/mazu/run_path; nohup ./n*o_4d_dynamic_pub_app &" > /dev/null'
process = subprocess.Popen(command, shell=True)