进程相关模块
os/sys
- os.popen
- os.system (调用系统内置命令行)
- sys.exit os.abort 终止,abort是强制终止
- exec家族 (将会接管控制权利)
关os.popen和system的区别,大致如下
1.返回值不同。popen返回类似于管道流,可以读取输出结果;system返回的是状态码
2.system会直接输出结果,就像调用shell一样。
>>> p=os.popen('ls /home')
>>> print p
<open file 'ls /home', mode 'r' at 0x7f8e3c7635d0>
>>> p.readlines()
['nagios\n', 'nova\n', 'rabbitmq\n', 'wz\n']
>>> s=os.system('ls /home')
nagios nova rabbitmq wz
>>> print s
0
subprocess 更强大的功能,可替代os/sys
- Popen
- call 对Popen的简化,参数列表相同,返回code。可以用来替代os.system有优势 1可用参数列表,不用字符串转义 2 更好的处理返回值
- check_all 同call,当返回值不是0的时候报错 CallProcessError
Popen例子1,这里可以设置stdout stdin stderr 其值可以设置为None PIPE 和文件描述符
pingP = subprocess.Popen(args="ping www.baidu.com",shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
pingP.wait()
pingP.pid
pingP.returncode
print pingP.stdout.read()
使用communicate,communicate会占用缓存,当数据量大的时候尽量不要用
p = subprocess.Popen(args="cat",shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE)
pout,perr=p.communicate(input="hello world!")
print pout