将变量传递给 Subprocess.Popen [英] Passing Variables to Subprocess.Popen

查看:75
本文介绍了将变量传递给 Subprocess.Popen的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个脚本,它通过 subprocess.Popen 模块调用另一个 python 脚本.但是因为我有参数存储在变量中

I have a script which calls another python script by subprocess.Popen module. But since I have arguments stored in variable(s)

servers[server]['address']
servers[server]['port']
servers[server]['pass']

我无法执行命令

p = subprocess.Popen(["python mytool.py -a ", servers[server]['address'], "-x", servers[server]['port'], "-p", servers[server]['pass'], "some additional command"], shell=True, stdout=subprocess.PIPE)

推荐答案

Drop shell=True.如果 shell=TruePopen() 的参数在 Unix 上被区别对待/a>:

Drop shell=True. The arguments to Popen() are treated differently on Unix if shell=True:

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 是一种安全隐患,如警告 在文档中.

Note that passing shell=True for commands with external input is a security hazard, as described by a warning in the docs.

这篇关于将变量传递给 Subprocess.Popen的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆