gpt4 book ai didi

使用 perl 进行格式化的 Python 子进程提供不完整的输出

转载 作者:行者123 更新时间:2023-12-04 07:23:51 27 4
gpt4 key购买 nike

我在读取 python 子进程命令的输出时遇到问题。
我想读取其输出的 bash 命令:

pacmd list-sink-inputs | tr '\n' '\r' | perl -pe 's/ *index: ([0-9]+).+?application\.process\.id = "([^\r]+)"\r.+?(?=index:|$)/\2:\1\r/g' | tr '\r' '\n'
当我通过 bash 运行它时,我得到了预期的输出:
4 sink input(s) available.
6249:72
20341:84
20344:86
20350:87
当我尝试通过运行其中一个的 python 子进程获取它的输出时:
  • subprocess.Popen(cmnd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0].decode('UTF-8')
  • check_output(cmnd,shell=True).decode('UTF-8')
  • subprocess.run(cmnd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stdout.decode('utf-8')

  • 哪里 cmnd = """pacmd list-sink-inputs | tr '\n' '\r' | perl -pe 's/ *index: ([0-9]+).+?application\.process\.id = "([^\r]+)"\r.+?(?=index:|$)/\2:\1\r/g' | tr '\r' '\n'"""它提供以下输出: '4 sink input(s) available.\n\x02:\x01\n\x02:\x01\n\x02:\x01\n\x02:\x01\n'这是意外的,因为它没有 6249:72 等。我想要的数字。即使 stderr 是空白的,返回码也是 0 预期的。
    我能找到的唯一解决方法是将 bash 输出重定向到文本文件,然后通过 python 读取文本文件,我不想使用它,因为这是不必要的文件 IO。
    我已经过了 Missing output from subprocess command , Python Subprocess Grep , Python subprocess run() is giving abnormal output [duplicate]和许多其他人,但无法理解出了什么问题。

    最佳答案

    你有一个引用问题。 """\1"""意味着 chr(0o1) .产生字符串 \1 ,您可以使用 """\\1""" . \ 的其他实例应该是 \\以及。
    由于 \ 的所有实例需要转义,你也可以使用 r"""\1""" .
    其他事宜:

  • \1\2无论如何,在正则表达式之外是错误的。您应该使用 $1$2 .
  • 这里没有使用多行文字。 "..."r"..."就足够了。
  • 整机tr使用 -0777 可以避免业​​务导致 perl将整个文件视为一行。

  • 这给了我们: cmnd = "pacmd list-sink-inputs | perl -0777pe's/ *index: (\\d+).+?application\\.process\\.id = "([^\\n]+)"\\n.+?(?=index:|$)/$2:$1\\n/sag'"或者 cmnd = r"pacmd list-sink-inputs | perl -0777pe's/ *index: (\d+).+?application\.process\.id = "([^\n]+)"\n.+?(?=index:|$)/$2:$1\n/sag'"但是为什么这里要使用 Perl 呢?你可以很容易地用 Python 做同样的事情!

    关于使用 perl 进行格式化的 Python 子进程提供不完整的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68329156/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com