请看下面的文档描述:
Popen.communicate(input=None, timeout=None)
请注意,如果要将数据发送到进程的标准输入,则需要使用stdin=PIPE创建Popen对象。类似地,为了在结果元组中不只得到None,你还需要给予stdout=PIPE和/或stderr=PIPE。
p=subprocess.Popen(['nslookup'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdin、stdout 和stderr 分别指定程序的标准输入、标准输出和标准错误文件的句柄。有效值为PIPE、DEVNULL、已经存在的文件描述器(正整数)、已经存在的文件对象和None。PIPE表示应该创建子进程的新管道。DEVNULL表示将使用特殊文件os.devnull。使用默认设置None,不会发生重定向;子进程的文件句柄将从父进程继承。
请教关于 PIPE 的原理解释。谢谢。
看文档后,我个人的理解:如果subprocess.Popen 不使用 PIPE 参数,则仍然使用父进程的输入输出,因此会等待用户输入。 使用PIPE 后,Popen.communicate 则可以采用新的管道进行输入输出。
望给出一定的原理解释,或者参考资料。感谢。