我实际上并没有试图让这段特定的代码正常工作,但它的输出让我怀疑提示到底写在哪里
subprocess.run("bash", shell=True, stderr=subprocess.PIPE)
然后我键入fakecommand
,然后点击回车,然后输入EOF。它返回:
CompletedProcess(args='bash', returncode=127, stderr=b'bash: line 2: fakecommand: command not foundn')
这并没有捕捉到stderr
中的提示,但也没有像我预期的那样打印到屏幕上(没有出现类似user@host
的内容(。
我知道在Python中调用bash
是非常古怪的。我的问题是为什么提示没有出现。
您可以使用unbuffer
使bash的副本认为stderr是TTY,即使它真的要进入FIFO;这将导致它在原本会抑制提示的情况下发出提示。
subprocess.run(['unbuffer', 'bash'], stderr=subprocess.PIPE)
注意,shell=True
已被删除——我们不想在bash的另一个副本中启动bash的一个副本。