首页 > 解决方案 > 使用列表调用时打印转义的 subprocess.run 字符串

问题描述

我正在使用 python 的 subprocess 模块进行系统调用。我正在将一个列表传递给 subprocess.run,以便 subprocess 处理转义我的参数。

    result = subprocess.run([
        'curl',
        '--form', 'measurement=river_discharge',
        '--form', 'file=@/my/file/path',
        'http://my_server.com/webform'
    ], check=True)

我想打印子进程中的转义字符串,以便我可以复制粘贴它。 result.args运行命令后与我提交的列表相同。有没有办法让转义字符串子进程从此列表生成?

在我的示例中,我正在寻找的字符串类似于

curl 
--form measurement=river_discharge 
--form file=@/my/file/path 
http://my_server.com/webform

标签: pythonsubprocess

解决方案


subprocess实际上并不生成转义字符串。执行命令时,列表的每个元素都作为单独的参数简单地传递。不涉及外壳,因此无需逃避任何东西。

但是,您可以使用shlex.quote()来模拟必要的引用。

import shlex

print(' '.join(map(shlex.quote, result.args)))

推荐阅读