我正在查看此脚本以在创建 ova 时禁用 shell=True。
它在 shell=True 时有效,但在 shell=False 时给我一个 TypeError。我很确定问题出在命令的这一部分" vi:\//" + username + ":" + encodedPassword + "@" + hostname"
——因为当我从列表中删除这个元素(即命令)时,脚本会向前移动。我已经尝试过硬编码值,例如"vi:\//user:password@70.60.70.90"
并且也删除了,但我仍然收到这种类型的错误。
Python版本是2.7
com1 = "/usr/bin/ovftool --acceptAllEulas --disableVerification --noSSLVerify --datastore=" + datastore +
" --network=\"" + network + "\" --name=" + name + " " + ovalocation + " vi:\//" + username +
":" + encodedPassword + "@" + hostname
#prior to disabling shell=True
# coms = subprocess.Popen(com1, shell=True,
# stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# set shell=False - now it requires the command to be a list rather than a string.
coms = subprocess.Popen(com1.split(), shell=False,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
错误:
'unsupported operand type(s) for +: 'Popen' and 'str''
我究竟做错了什么?
编辑:我知道这是 vi 命令的问题,因为当"vi:\//" + username + ":" + encodedPassword + "@" + hostname"
用硬编码替换时"hello"
,脚本会向前移动。