我使用commands.getstatusoutput('some_terminal_command')
将某个终端命令的输出存储在变量中。但我很想知道python如何从终端获得输出? python有“Shell”的某些部分吗?
答案 0 :(得分:5)
最终,您对运行命令的调用使用fork and exec系统调用。这些是操作系统提供的功能,并且暴露给大多数编程语言,允许语言启动新进程并获得其输出。它是许多现代操作系统的基本构建块之一。
请注意,并非所有操作系统都有fork-exec,但如果他们不熟悉,他们将拥有某种系统提供的启动进程的功能。这是使用高级语言的好处之一:它隐藏了跨平台API背后的特定于平台的功能。
答案 1 :(得分:1)
如果您read the source,您会看到它使用os.popen
来电。然而,有趣的是os.popen
模块中没有定义os.py
。
最终和some help我找到了posixmodule source,它验证了python与Linux交互的方式,至少在定义PYCC_GCC
时,是通过{{ 1}}功能。根据{{1}},这意味着:
popen()函数通过创建管道,分叉和调用shell来打开一个进程。
如果你仔细阅读这个模块,你会发现该模块为不同的操作系统(如OSX,NT等)定义了一些其他方法。