波本说。communicate()关闭所有父端文件描述符?
你好,
我是Python的崭新,但是一位经验丰富的C/UNIX程序员。我正在用Python重写一些旧的外壳脚本,这些脚本有很多事情
设置输出=`猫这个| grep |不管...``
我的感觉是应该使用subprocess.popen()来完成这项工作。
我发现了许多示例显示了如何做到这一点,包括道格·海尔曼(Doug Hellmann)网站上的一个非常合适的示例,该网站显示了如何将一堆Popen()S链接在一起,以模仿上面显示的管道示例。但是,我有三个问题:
(1)popen.communicate()是否关闭由Popen()呼叫打开的所有父端文件描述符?我将孩子的stdout连接到父母,例如
comm = subprocess.popen(args,stdout = subprocess.pipe)
这是在循环运行数千次的情况下完成的,因此我需要确保在父母中打开的每个文件描述符以与孩子通信后立即关闭。
(2)如果我不使用popen.communicate()(或者如果不关闭文件描述符),则确切地说是我需要关闭哪个文件描述符以及如何?我假设我唯一需要关闭的内容是我在popen()呼叫中指定=管道的任何stdio流。对于上面的示例,我会做
comm.stdout.close()
不用担心吗?
(3)popen.returncode上的文档有点模糊。这仅仅是孩子的退出代码,还是在OS.Wait()中更充分记录的退出代码和信号状态的组合?
谢谢!