【问题标题】:Python3 How to handle special characters returned in output of subprocess.run?Python3 如何处理 subprocess.run 输出中返回的特殊字符?
【发布时间】:2020-07-14 19:17:48
【问题描述】:

我正在运行的代码看起来像这样

o=subprocess.run( ['ls -1 pathtosomedir/'+prefix+'*'],shell=True, stdout=subprocess.PIPE, universal_newlines=True)
print('details:',o.stdout)

如果返回的文件有括号,例如 test(1).csv

那么输出是

详情:test(1).csv

/bin/sh: 1: 语法错误:"(" 意外

为什么它似乎在尝试解析输出?处理这些案件的正确方法是什么?谢谢!

(我使用的是python 3.6.9)

编辑:原来 o.stdout 被传递给后续的 subprocess.run。如果 o.stdout 包含括号,则需要将其转义,如答案中所述。所以结束这个问题。

【问题讨论】:

    标签: python


    【解决方案1】:

    stdoutprint 语句不应解析输出。问题可能在第一行。

    prefix 变量中是否有括号或特殊字符? 例如:

    o=subprocess.run(['ls' + ' test(1)'])
    

    将为您提供您指定的确切错误

    /bin/sh: -c: line 0: syntax error near unexpected token (

    因为您需要像这样使用反斜杠转义括号:

    o=subprocess.run(['ls' + ' test\(1\)'])
    

    【讨论】:

    • 前缀只有数字......所以不确定发生了什么。也许与 * 以及它何时被扩展有关。我不确定 python 是否正在尝试扩展它而不是 shell...
    • 嘿,谢谢你的评论让我找到了问题!它来自后续使用 o.stdout 的 subprocess.run,其中包含括号,而这些括号需要转义!
    • 太棒了!很高兴我能帮上忙!
    猜你喜欢
    • 2010-11-19
    • 2020-05-02
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多