我正在编译一个命令在python unix系统上执行,包含多个管道步骤。例如: -错误检查管道命令在python中为unix
grep foo myfile | cmd1 | cmd2 > output
这些对应于在具有foo
在他们myfile
条目的一系列的变换。我有时将其构造为os.system
执行的命令,在其他情况下使用subprocess
模块执行。
如何从Python中对管道的每个部分执行错误检查?例如,在99%的情况下,myfile
中有foo
条目,其余管道工程。但是,如果由于某种原因myfile
存在但不包含foo
条目,则管道的其余部分会因为管道空文件而中断,而其余命令需要非空输入才能工作。这使得它很难调试,因为你看到的是一个破裂的管道输出,不知道这中间步骤失败。
有没有一种方法来构建Python中的错误检查中间步骤的管道?例如。检查管道的grep
部分是否确实包含某些输出,grep
的输入上的cmd1
输出是否还包含某些输出,依此类推?谢谢。
做到这一点,最简单的方法是做事情本地在Python中。调用从OS来回和Python只是引入了额外的变量和通常最好在第一时间避免了复杂性。 –
所以,你会怎么做它在Python,如果它需要调用外部命令?我知道的唯一方法是''subprocess''。我无法改写我在Python中调用的所有命令 – user248237dfsf
在bash中,您有PIPESTATUS变量 - 如果可以的话使用。 否则就像在sr2222建议的python中那样做 - 设置管道,用重定向输入输出启动程序,检查它们的退出状态,那有什么问题?你提到的模块甚至以stdin/stdout/stderr作为参数! – loreb