在 python 中格式化命令

Formatting a command in python

我能够通过命令行 运行 此命令,但是当我将它转移到 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)

我在 "returned non-zero exit status 255" 处收到错误消息。是因为我格式化字符串的方式吗?总体而言,我有哪些选择可以让它发挥作用?

编辑:已由 J.F 解决。塞巴斯蒂安

字符“\r”被当作墨盒 return 和“\t”作为制表符;通过在单引号之前添加 "r" 来使用原始输入;看看这个:

>>> 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"'
>>> len(test)
172
>>> test2 = r'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"'
>>> len(test2)
174

如果在您的 Windows 机器上的 %PATH% 某处有 aws.exe 然后将其输出保存在给定文件中:

#!/usr/bin/env python
import subprocess

cmd = ('aws ec2 create-image --instance-id i-563b6379 '
       '--name rwong_TestInstance --output text '
       '--description rwong_TestInstance --no-reboot')
with open(r"V:\rwong\Work Files\Python\test.txt", 'wb', 0) as file:
    subprocess.check_call(cmd, stdout=file)

也就是说,您的代码中至少存在两个问题:

  1. 转义序列,例如 \r\t
  2. > 是一个 shell 重定向运算符,即您需要 运行 shell 或在 Python
  3. 中模拟它