我现在有一个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将在下一个命令执行之前更改状态,因此我的shell命令行现在(概念上)是:
cmd0; cmd1 | cmd2

在这种情况下,有没有办法将输入发送到cmd1而不是cmd0我假设输出将包括cmd0的输出(它将是空的),然后是cmd2的输出。
cmd0实际上不应该从stdin中读取任何内容,这在这种情况下有什么区别吗?
我知道这可能只是一种愚蠢的方法,我正在尝试修补cmd0而不太明显地修改其他代码也就是说,如果有更干净的方法来解决这个问题,我愿意接受建议。

最佳答案

在子shell中执行cmd0和cmd1,并将/dev/null重定向为cmd0的stdin:

(cmd0 </dev/null; cmd1) | cmd2

07-24 12:44