虽然在Python解释器(内壳在Linux系统上运行)OS模块打打闹闹,我注意到它是可以做到以下几点:运行Python解释器的Python解释器:解释行为
>>> os.system("python") #execute run python command in enclosing shell
产生以下输出,表明一个新的Python REPL会话:
Python 2.7.9 (default, Apr 2 2015, 15:34:55)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> #*blinking cursor*
从这里,它可能再次进行系统调用启动的Python的一个新的会话,从中我可以再次进行系统调用,等等。这些Python环境似乎与每个环境无关其他因素是变量不会在会话中共享,并且系统调用被等效处理。
这些会话似乎内部彼此运行,至少在一定程度上,而不是在平行,由退出()函数的结果所证实:
>>> os.system("python")
Python 2.7.9 (default, Apr 2 2015, 15:34:55)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> quit()
0
>>> quit()
0
>>> quit()
0
>>> quit()
[email protected]:~/Desktop$ python
然而,快速检查(> >>从外壳正在进行的过程中使用os.system(“PS -e”))揭示了一个新的SH每个Python解释器运行:
11802 ? 00:00:00 kworker/u16:0
11803 pts/3 00:00:00 sh
11804 pts/3 00:00:00 python
11806 pts/3 00:00:00 sh
11807 pts/3 00:00:00 python
11810 pts/3 00:00:00 sh
11811 pts/3 00:00:00 python
11813 pts/3 00:00:00 sh
11814 pts/3 00:00:00 ps
任何人都可以在下面的方面解释(貌似)的奇怪行为系统进程?也就是说,这些会话是并行还是相互并行?
如果此问题出现之前道歉,但我不确定其他人可能如何呈现它。
你究竟发现了什么奇怪的? – Alik
没有什么奇怪的。 “os.system”被记录为创建一个新的进程(它使用术语“subshell”)。创建新的流程正是它的目的。 –
@Alik在他的评论中提供了一个很好的(如果是间接的)答案。这个问题的答案和许多其他os *问题是:Python几乎都遵循下面的libc。要看看'os.system'在Python中做了什么,[看看底层c lib的'system'调用是干什么的](http://code.metager.de/source/xref/gnu/glibc/sysdeps/posix/system 。C)。 – kojiro