调用外部程序时,空格、引号与用户输入的边界很重要。使用参数列表并避免不必要的shell解释,可以让每个参数的含义更明确。

列表中的每项是一份参数
示例使用当前Python解释器运行一段固定代码,并把带空格的文字作为一个参数传入。程序不需要手工给这个文字加shell引号,也不把它拼成新的可执行命令。
固定程序与固定代码同样重要
参数列表不是允许执行任意程序的授权机制。程序路径、选项和操作范围仍应受控;本例中的-c代码完全固定,不能替换成未经审查的外部输入。不同平台及特殊可执行文件还需查阅对应说明。
给执行结果一个清楚边界
check=True在非零退出时报告异常,timeout限制等待,capture_output保存输出供检查。实际应用还要考虑输出体积与错误信息中的敏感数据。本文仅在隔离目录运行自己的解释器,不启动外部网络命令。
可以运行的练习
import subprocess
import sys
result = subprocess.run(
[sys.executable, "-c", "import sys; print(sys.argv[1])", "hello world"],
check=True, capture_output=True, text=True, timeout=5,
)
assert result.stdout.strip() == "hello world"
print(result.stdout.strip())
示例已在本地隔离环境运行检查。使用固定输入,不访问外部接口,也不读取真实业务文件。
资料与继续学习
Python:subprocess。资料查阅日期:2026年9月29日。步骤与练习由本站整理。
资料查阅与编辑日期:2026年9月29日。作者:玖柒。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END







