python - 带双引号的子流程

标签 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/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

最佳答案

您可以使用三引号将字符串文字括起来,同时使用单引号和双引号:

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

关于python - 带双引号的子流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58468393/

相关文章:

python - 子进程未创建 ffmpeg 命令的输出文件

python - 具有多索引列的 Pandas 中棘手的宽到长转换

python - Django 中的多个数据库破坏了测试隔离。如何解决?

python - 等待第一个子进程完成

Python:结束一个无限迭代的子进程

python - 使用 Python 提取(而不是读取)大型 gzip 文件

python - 带有短命令的间歇性 "OSError: [Errno 7] Argument list too long"(~125 个字符)

python - 保存对象(数据持久性)

python - 使用 linspace 和 ones 创建 Numpy 矩阵

python - 如果存在唯一键,则 SQLAlchemy 更新