我目前正在执行一个 Bash 命令(通过 Python 的 subprocess.Popen
),它正在从 stdin
读取,执行一些操作并输出到 stdout
。类似的东西:
pid = subprocess.Popen( ["-c", "cmd1 | cmd2"],
stdin = subprocess.PIPE,
stdout = subprocess.PIPE,
shell =True )
output_data = pid.communicate( "input data\n" )
现在,我想做的是将其更改为在同一个子 shell 中执行另一个命令,该命令将在下一个命令执行之前改变状态,因此我的 shell 命令行现在(概念上)是:
cmd0; cmd1 | cmd2
在这种情况下,有什么方法可以将输入发送到 cmd1
而不是 cmd0
吗?我假设输出将包括 cmd0
的输出(将为空),然后是 cmd2
的输出。
cmd0
实际上不应该从 stdin
读取任何内容,这在这种情况下有什么不同吗?
我知道这可能只是一种愚蠢的做法,我试图在 cmd0
中打补丁,而不会对其他代码做太大的改动。也就是说,如果有更简洁的方法来解决这个问题,我愿意接受建议。
最佳答案
在子 shell 中执行 cmd0 和 cmd1 并将 /dev/null 重定向为 cmd0 的 stdin:
(cmd0 </dev/null; cmd1) | cmd2
关于python - 当我在 Bash 中有一系列命令时,如何重定向标准输入/标准输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2650759/