首页 > 后端开发 > Python教程 > 为什么 `subprocess.Popen()` 中变量传递失败以及如何修复它?

为什么 `subprocess.Popen()` 中变量传递失败以及如何修复它?

Mary-Kate Olsen
发布: 2024-11-28 22:17:13
原创
305 人浏览过

Why Does Variable Passing Fail in `subprocess.Popen()` and How Can I Fix It?

对 subprocess.Popen() 参数中的变量传递进行故障排除

使用 subprocess.Popen() 调用另一个 Python 脚本时,将变量作为参数传递可能会遇到意外问题。让我们研究一下为什么会发生这种情况以及如何解决它。

提供的代码演示了尝试使用存储在变量中的参数执行脚本 mytool.py。然而,shell=True 参数可能会阻碍执行。

解决方案:

要成功传递变量,省略 shell=True 参数。在 Unix 环境下,启用 shell=True 会修改 Popen() 解释参数的方式,可能会导致不良行为。

以下是解决此问题的修改后的代码片段:

import sys
from subprocess import Popen, PIPE

# populate list of arguments
args = ["mytool.py"]
for opt, optname in zip("-a -x -p".split(), "address port pass".split()):
    args.extend([opt, str(servers[server][optname])])
args.extend("some additional command".split())

# run script
p = Popen([sys.executable or 'python'] + args, stdout=PIPE)
# use p.stdout here...
p.stdout.close()
p.wait()
登录后复制

安全注意事项:

对涉及外部输入的命令使用 shell=True 存在安全隐患。正如 Python 文档中所述,由于潜在的漏洞,不鼓励这种做法。

以上是为什么 `subprocess.Popen()` 中变量传递失败以及如何修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板