运行 a shell 时子进程无输出

Subprocess no output when running a shell

我试图在 Python 子进程模块中 运行 一个系统 shell:

p = subprocess.Popen("/bin/bash", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
p.wait()
print(p.communicate())

但是,它打印了 (b'', b'')
我也尝试了其他 shells,但他们都失败了。 (Zsh、Sh 和 FiSH)
我怎样才能得到输出?提前致谢!

我猜它对我有用。

(base) tzane:~/python_test$ python test_1.py
whereis ls
exit
(b'ls: /bin/ls /usr/share/man/man1/ls.1.gz\n', b'')
(base) tzane:~/python_test$

如果您不告诉 bash 输出任何内容,您就不会得到任何输出。用管道调用 .wait() 会导致死锁,所以我会做这样的事情

import subprocess

p = subprocess.Popen("/bin/bash", stdout=subprocess.PIPE, stderr=subprocess.PIPE)
try:
    print(p.communicate(timeout=30))
except TimeoutExpired:
    p.kill()
    print(p.commnunicate())

documentation 中所建议,或者如果您不必与子进程交互而只想捕获输出,则只需使用 subprocess.run