【发布时间】:2011-02-08 16:41:19
【问题描述】:
我目前正在执行一个 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 而不会太显着地改变其他代码。也就是说,如果有更清洁的方法来解决这个问题,我愿意接受建议。
【问题讨论】:
-
很难理解你在问什么。也许举一个具体的例子,或者更好的是,描述你正在尝试做的事情。
标签: python bash pipe subprocess