Python 双引号子流程

Python 双引号子流程,python,subprocess,Python,Subprocess,在python中,必须使用子进程运行以下perl命令 perl命令: perl dcm.pl -r ona_sql sql="select something from table where name='somename'" header=no 我需要避开这些引语,但无法让它发挥作用 下面的例子对我来说最有意义,但它也不起作用 import subprocess import sys subprocess.check_output(["/usr/bin/perl", "/opt/ona/b

在python中,必须使用子进程运行以下perl命令

perl命令:

perl dcm.pl -r ona_sql sql="select something from table where name='somename'" header=no
我需要避开这些引语,但无法让它发挥作用

下面的例子对我来说最有意义,但它也不起作用

import subprocess
import sys

subprocess.check_output(["/usr/bin/perl", "/opt/ona/bin/dcm.pl", "-r", "ona_sql", "sql=\"select something from table where name='somename'\"", "header=no"]).decode(sys.stdout.encoding)
结果:

subprocess.CalledProcessError: Command '['/usr/bin/perl', '/opt/ona/bin/dcm.pl', '-r', 'ona_sql', 'sql="select something from table where name=\'somename\'"', 'header=no']' returned non-zero exit status 3

请尝试改用单引号:

'sql="select something from table where name=\'somename\'"'

可以使用三重引号将字符串文字用单引号和双引号括起来:

subprocess.check_output(['perl', '/opt/ona/bin/dcm.pl', '-r', 'ona_sql', '''sql="select something from table where name='somename'"''', 'header=no'])

subprocess.CalledProcessError:Command'['/usr/bin/perl'、'/opt/ona/bin/dcm.pl'、'-r'、'ona_sql'、“sql=select something from-where-name='somename','header=no']'返回非零退出状态2参数列表对我来说是正确的。如果直接从命令行运行命令,您认为该命令有效吗?这也不起作用。它以某种方式从sql命令中删除引用。它应该是“sql=”select something from table where name='somename'”subprocess.CalledProcessError:Command'['perl','/opt/ona/bin/dcm.pl','-r','ona_sql','sql=”select semething from table where name='somename\','header=no']'返回非零退出状态3我想这与dcm.pl如何返回数据以及子流程如何无法处理数据有关。我创建了一个bash脚本,在该脚本中执行perl命令,并将其存储在var中并进行响应,从而使其正常工作。如果我使用子进程调用bash脚本,它就可以正常工作。