我现在有一个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