【发布时间】:2025-12-09 10:20:03
【问题描述】:
我实际上并没有试图让这段特定的代码工作,但它的输出让我质疑提示的确切写入位置。在 Python 中考虑:
subprocess.run("bash", shell=True, stderr=subprocess.PIPE)
然后我输入fakecommand 并按回车键,然后输入EOF。它返回:
CompletedProcess(args='bash', returncode=127, stderr=b'bash: line 2: fakecommand: command not found\n')
这不会捕获stderr 中的提示,但它也不会像我预期的那样打印到屏幕上(没有像user@host 那样出现)。
我知道在 Python 中调用 bash 非常古怪。我的问题是为什么提示没有出现。
【问题讨论】:
-
提示被写入标准错误,但它们不会被写入非交互式shell。
-
...当您没有明确指定您希望您的 shell 具有交互性时,将根据其输出是否发送到 TTY 来确定,而管道不是。
-
如果你在交互式 shell 中运行
bash 2> >(cat >&2),你会看到同样的结果——stderr 不是 TTY,所以没有提示。