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)