python - 如何确保报告管道中的错误

标签 python bash

我做了

python py_prog.py | java scalaProg.Pkg

Python 程序必须从数据库获取内容并将其通过管道传递给 Scala 程序。我们对 python 进行了集中错误监控,但 scala 程序可能会默默地失败。因此,如果 Scala 程序失败,我希望使用第三个程序将其 stderr 转移到我们的监控系统,如 bash 伪代码:

(python py_prog.py | java scalaProg.Pkg) || python logging_program.py

(编写 logging_program 并使其与我们的错误监控对话很容易,为 scala 程序设置类似的系统很困难)。

那么我该如何实现:

  1. 当 scalaProg 失败时,将其 stderr 通过管道传输到第三个程序
  2. 处理IOError: [Errno 32] Broken pipe当 scalaProg 失败时在 py_prog 中

最佳答案

使用 bash,您可以使用进程替换,并且您仍然会看到 java scalaProg.Pkg 的输出:

python py_prog.py | java scalaProg.Pkg 2> >(python logging_program.py)

或者您可以将其放在 tee 上以在终端上查看 stderr:

python py_prog.py | java scalaProg.Pkg 2> >(tee >(python logging_program.py))

如果是运行 java scalaProg.Pkg 的 shell 发送错误消息,您可以将其封装在子 shell 中以获取错误:

python py_prog.py | (java scalaProg.Pkg;) 2> >(tee >(python logging_program.py))

如果您需要获取所有内容(来自 java scalaProg.Pkg 的标准输出和标准错误,请执行以下操作:

python py_prog.py | java scalaProg.Pkg > >(tee >(python logging_program.py)) 2>&1

或者这个:

python py_prog.py | (java scalaProg.Pkg;) > >(tee >(python logging_program.py)) 2>&1

如果您想从 python py_prog.pyjava scalaProg.Pkg 获取所有 stdout 和 stderr,请执行以下操作:

{python py_prog.py | java scalaProg.Pkg;} > >(tee >(python logging_program.py)) 2>&1

或者这也包括调用 shell 可能生成的错误:

(python py_prog.py | java scalaProg.Pkg;) > >(tee >(python logging_program.py)) 2>&1

如果您只想从 session 中获取 stderr,则只需使用 2>:

(python py_prog.py | java scalaProg.Pkg;) 2> >(tee >(python logging_program.py))

关于python - 如何确保报告管道中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18118809/

相关文章:

python - 将 for 循环的搜索结果写入文件仅给出一行(一个结果)

python - 获取错误 AttributeError : 'WebDriver' object has no attribute 'GoTo' "when executing a python script in selenium

python - 使用unittest和Python 3.6导入时出错

linux - Bash 用另一个字符串替换空格和字符串结尾

json - 如何从 bash 重复调用 jq 增量生成 JSON?

linux - 从 shell 到 docker 容器执行多个命令

java - 从 OSX ".app" bundle 运行 Java 会导致 "Error -10810"

python - 使用python发送自动生成的邮件问题

python - Pylons路由,location属性是什么?

bash - bash :播放当前目录中的所有音频