我正在查看这个脚本,在创建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)
错误:
^{pr2}$我做错什么了?在
编辑:
我知道这是vi命令的问题,因为当将"vi:\//" + username + ":" + encodedPassword + "@" + hostname"
替换为硬编码的"hello"
时,脚本会向前移动。在
如果您使用了很多参数,那么使用
string
而不是list of arguments
,这可以通过设置shell=True
来实现。这也很容易调试,因为相同的命令(您应该打印)将以相同的方式从本机shell运行。在请记住,
shell=True
可能存在安全问题,这取决于它的运行方式。在相关问题 更多 >
编程相关推荐