我正在尝试从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]的输出),它可以正常工作。知道我做错了吗?
谢谢!
答案 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)
我将长串分成两行。括号确保它被处理为相同的字符串,即使跨越多行也是如此。作为副作用,如果被调用程序不需要,则可以省略单引号的转义。