Python子进程提供语法错误,但从shell运行

时间:2014-10-18 10:01:16

标签: python subprocess

我正在尝试从python运行shell命令,并获得语法错误。它可能与嵌套引号有关,但我无法弄清楚如何使其工作。

这是命令:

In [44]: command
Out[44]: '/Applications/itt/idl/bin/idl -e "print, barycorr(2456718.886512, 16.109814, -36.799472, 0, obsname=\'CTIO\')"'

In [45]: print command
/Applications/itt/idl/bin/idl -e "print, barycorr(2456718.886512, 16.109814, -36.799472, 0, obsname='CTIO')"

当我使用下面两个中的任何一个运行命令时,我在idl中遇到语法错误:

subprocess.call(command, shell=True)
subprocess.call(shlex.split(command))

如果我从命令行运行命令([45]的输出),它可以正常工作。知道我做错了吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

尝试手动构建列表,例如:

cmd_lst = ['/Applications/itt/idl/bin/idl',
           '-e',
           ("print, barycorr(2456718.886512, 16.109814, -36.799472, 0,"
            " obsname='CTIO')"),
           ]

subprocess.call(cmd_lst)

我将长串分成两行。括号确保它被处理为相同的字符串,即使跨越多行也是如此。作为副作用,如果被调用程序不需要,则可以省略单引号的转义。