2020年7月3日 / 28次阅读 / Last Modified 2020年7月3日
os模块,多进程
虽然创建子进程,python推荐使用subprocess模块,因为可以更好的与子进程交互。不过,os.system接口还是有用武之地。
os.system底层调用的C标准接口system,它只能返回子进程的返回码,而无法与子进程进行复杂交互。我们就简单理解它可以直接在python代码中执行shell命令吧,子进程的输出会直接出现的父进程的stdout内。
>>> a = os.system('ls -ahl')
total 56K
drwxr-xr-x 5 pi pi 4.0K Jul 3 14:22 .
drwxr-xr-x 5 pi pi 4.0K Jun 24 12:00 ..
-rw-r--r-- 1 pi pi 2.9K Jun 18 20:49 common.py
-rw-r--r-- 1 pi pi 164 Jun 18 20:49 config.ini
drwxr-xr-x 8 pi pi 4.0K Jul 3 10:01 .git
drwxr-xr-x 2 pi pi 4.0K Jul 3 10:00 __pycache__
-rw-r--r-- 1 pi pi 48 Jun 7 22:17 README.md
-rw-r--r-- 1 pi pi 603 Jun 18 20:49 start.py
-rw-r--r-- 1 pi pi 16K Jul 3 10:00 tcp_server.py
drwxr-xr-x 2 pi pi 4.0K Jul 2 10:48 test
-rw-r--r-- 1 pi pi 2.1K Jun 18 20:49 udp_hb.py
>>> a
0
关于子进程的创建需要明确两点: (1)父进程的环境变量(environment variables)会默认传递到子进程中(工作目录PWD就是环境变量之一) (2) 使用os.system函数,子进程无法影响父进程中的环境变量
有时我们在python中调试代码的时候,还是挺方便的。比如上面的示例,查看一下某个路径的文件列表,或者在不离开当前python环境的情况下,启动一个后台进程。
我个人比较喜欢这样:在需要的时候,用os.system启动一个新的bash子进程,干活事情后,再回到原来的python环境,这样原来环境中的符号都不会丢失!
>>> os.system('bash')
pi@rpi01:~/repos/cook $ ll
total 44
-rw-r--r-- 1 pi pi 2908 Jun 18 20:49 common.py
-rw-r--r-- 1 pi pi 164 Jun 18 20:49 config.ini
drwxr-xr-x 2 pi pi 4096 Jul 3 10:00 __pycache__
-rw-r--r-- 1 pi pi 48 Jun 7 22:17 README.md
-rw-r--r-- 1 pi pi 603 Jun 18 20:49 start.py
-rw-r--r-- 1 pi pi 16340 Jul 3 10:00 tcp_server.py
drwxr-xr-x 2 pi pi 4096 Jul 2 10:48 test
-rw-r--r-- 1 pi pi 2130 Jun 18 20:49 udp_hb.py
pi@rpi01:~/repos/cook $ exit
exit
0
这有点像在vim中启动一个bash,干活事情再回到vim一样!
在不需要与子进程做信息交换的场景下,感觉使用os.system比使用subprocess要简单直接一些!
-- EOF --
本文链接:https://www.pynote.net/archives/2125
《os.system接口》有1条留言
前一篇:add_argument函数的dest参数
后一篇:tk.Listbox的用法
Ctrl+D 收藏本页
©Copyright 麦新杰 Since 2019 Python笔记
如果在程序中使用os.system,小心它会弄乱你的程序的输出,因为os.system的子进程的输出不受控制,会直接出现在父进程的stdout中。 [ ]