我试图解决所有情况的一个简单案例。我正在运行一个子进程来执行某个任务,我不希望它要求 stdin,但在我什至不希望的极少数情况下,它可能会尝试读取。我想防止它在这种情况下挂起。
这是一个经典的例子:
import subprocess
p = subprocess.Popen(["unzip", "-tqq", "encrypted.zip"])
p.wait()
Run Code Online (Sandbox Code Playgroud)
这将永远挂起。我已经尝试添加
stdin=open(os.devnull)
Run Code Online (Sandbox Code Playgroud)
还有这样的..
如果我找到有价值的解决方案,我会发布。足以让我在父进程中收到异常 - 而不是无休止地进行通信/等待。
更新:似乎问题可能比我最初预期的更复杂,子进程(在密码和其他情况下)从其他文件描述符读取 - 例如 /dev/tty 与外壳交互。可能没有我想的那么容易解决..