【问题标题】:Processing file paths with parentheses with Python subprocess使用 Python 子进程处理带括号的文件路径
【发布时间】:2015-08-14 09:50:06
【问题描述】:

我要处理的文件的路径中包含括号。

path = "/dir/file (with parentheses).txt"

我正在尝试在 Python 中按如下方式处理它们:

subprocess.call("./process %s" % path, shell=True)

但是,我收到以下错误

/bin/sh: 1: Syntax error: "(" unexpected

如何传递正确的字符串来处理正确的路径?

【问题讨论】:

  • 你需要 shell=True 吗?如果不是这样,它可能会很好地将 args 设置为列表,并且不会让 shell 在特殊字符上跳闸

标签: python linux bash subprocess


【解决方案1】:

不要使用shell=True。它很容易出现问题(就像在 OP 中一样)并且启用了shell injection attacks

这样做:

subprocess.call(["./process", path])

如果您坚持使用shell=True,请阅读python 文档中的Security Considerations,并确保您使用shlex.quote 正确转义所有元字符。

【讨论】:

    【解决方案2】:

    试试这个

    subprocess.call('./process "%s"' % path, shell=True)
    

    我想问题更多是文件名中的空格。包含空格的文件名应该用./process "foo bar.txt" 这样的引号括起来,或者像这样./process foo\ bar.txt 这样转义。

    【讨论】:

      猜你喜欢
      • 2019-11-03
      • 2019-05-05
      • 1970-01-01
      • 2019-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-23
      相关资源
      最近更新 更多