Python子进程出错但在shell中正常运行

2 投票
1 回答
2091 浏览
提问于 2025-04-28 06:16

我想在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)

我把这个长字符串分成了两行。括号的作用是确保即使字符串跨越了多行,它也会被当作同一个字符串来处理。这样做的一个附带效果是,如果调用的程序不需要单引号的转义字符,那么这些转义字符可以省略。

撰写回答