【发布时间】:2015-03-26 00:48:51
【问题描述】:
我能够通过命令行运行此命令,但是当我将它转移到 Python 脚本并运行它时,它不起作用。
test = 'aws ec2 create-image --instance-id i-563b6379 --name "rwong_TestInstance" --output text --description "rwong_TestInstance" --no-reboot > "V:\rwong\Work Files\Python\test.txt"'
subprocess.call(test)
我收到一条错误消息,显示“返回非零退出状态 255”。是因为我格式化字符串的方式吗?总的来说,我有哪些选择可以让它发挥作用?
编辑:已由 J.F. Sebastian 解决
【问题讨论】:
-
默认情况下
subprocess.call具有shell=False。您需要通过 shell 调用它,因此请使用subprocess.call(test, shell=True)。顺便说一句,dgsleeps 关于转义字符的回答也是正确的。 -
我考虑过使用 shell=True,但我认为使用 shell=True 存在一些安全风险
-
如果您使用任何用户生成的命令部分。如果要在没有 shell 的情况下调用它,则必须将 shell 命令转换为参数列表。例如,此
subprocess.call('ls -l', shell=True)将变为subprocess.call(['ls', '-l'], shell=False)。您必须这样做,因为当您使用shell=True时,shell 会为您分隔参数。 -
好的,感谢您提供关于 shell=True 的清晰说明,我会记住这个提示以备后用。谢谢!
标签: python-2.7 amazon-web-services amazon-ec2 subprocess