Python子进程出错但在shell中正常运行
我想在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 个回答
1
试着手动构建你的列表,比如:
cmd_lst = ['/Applications/itt/idl/bin/idl',
'-e',
("print, barycorr(2456718.886512, 16.109814, -36.799472, 0,"
" obsname='CTIO')"),
]
subprocess.call(cmd_lst)
我把这个长字符串分成了两行。括号的作用是确保即使字符串跨越了多行,它也会被当作同一个字符串来处理。这样做的一个附带效果是,如果调用的程序不需要单引号的转义字符,那么这些转义字符可以省略。