为什么subprocess.Popen类不叫Subprocess?

4 投票
3 回答
721 浏览
提问于 2025-04-11 09:15

subprocess 模块中,最主要的类叫做 Popen,它代表了一个子进程。Popen 这个名字听起来像是有人想把它的名字弄得很符合某种命名规则,而不是选一个真正能代表这个对象的名字。有没有人知道为什么要用这个名字,而不是简单点的,比如 Subprocess 呢?

3 个回答

-1

我想这个名字之所以被选,是因为功能 subprocess 取代了以前在 os 模块中的 os.popen 函数。其实可能还有一些方法可以自动化地把这两者之间的使用转换过来。

5

subprocess.Popen 是用来替代一组叫做 os.popenX 的老旧函数的,这些函数在 POSIX 系统中已经存在很久了。我想,名字 Popen 让习惯使用旧函数的人更容易找到并使用这些新函数。

关于子进程的PEP(PEP 324) 对这个模块的名字有一点讨论,但没有涉及到 Popen 类的名字。一般来说,PEP 列表(Python 增强提案)是一个很好的起点,如果你想了解 Python 特性背后的原因。

8

我不是说这个名字有多好,但我理解的意思是这样的。

最开始,popen这个家族是在os模块里,它是老牌的posix popen的实现。把它们移到subprocess模块的时候,其实是个改名字的好机会,但我猜保留Popen这个名字可以让那些对Python有很长使用历史的人更容易在文档中找到它,甚至对那些老牌的posix函数也是一样。

从最早的posix版本开始,Popen就一直是用来打开一个进程,让你可以像操作文件一样读写它的标准输入输出。所以,Popen这个名字其实是ProcessOpen的缩写,试图让它看起来像是“打开”的意思。

撰写回答