os模块的system方法

system方法会创建子进程运行外部程序,方法只返回外部程序的运行结果。这个方法比较适用于外部程序没有输出结果的情况。

>>> import os  
>>> os.system("echo \"Hello World\"")   # 直接使用os.system调用一个echo命令  
Hello World         ——————> 打印命令结果  
0                   ——————> What's this ? 返回值?  
>>> val = os.system("ls -al | grep \"log\" ")   # 使用val接收返回值  
-rw-r--r--  1 root       root       6030829 Dec 31 15:14 log    ——————> 此时只打印了命令结果  
>>> print val             
0                   ——————> 注意,此时命令正常运行时,返回值是0  
>>> val = os.system("ls -al | grep \"log1\" ")  
>>> print val         
256                 ——————> 使用os.system调用一个没有返回结果的命令,返回值为256~  
>>>
import os
result=os.system("echo \"hello world\"")
#返回0
print("返回值"+str(result))
result=os.system("ls -al ")
#os.system("ls -al | grep \"log\"")
#返回0
print("返回值"+str(result))

打印值:

hello world
返回值0
总用量 20
drwxrwxr-x 4 mark mark 4096 6月   5 16:03 .
drwxrwxr-x 7 mark mark 4096 5月  29 13:12 ..
-rw-rw-r-- 1 mark mark  195 6月   5 16:03 1.py
drwxrwxr-x 3 mark mark 4096 6月   5 16:03 .idea
drwxrwxr-x 5 mark mark 4096 6月   5 14:45 venv
返回值0

os模块的popen方法

当需要得到外部程序的输出结果时,本方法非常有用,返回一个类文件对象,调用该对象的read()或readlines()方法可以读取输出内容。比如使用urllib调用Web API时,需要对得到的数据进行处理。os.popen(cmd) 要得到命令的输出内容,只需再调用下read()或readlines()等 如a=os.popen(cmd).read()

import os
result=os.popen("ls -lt")
content=result.read()
# 我们可以使用in来判断返回值中有木有一个字符串
if "py" in content:
    print("哈哈,存在py")
else:
    print("好吧,不存在py")
print(content)

打印结果

哈哈,存在py
总用量 12
-rw-rw-r-- 1 mark mark  231 6月   5 16:10 TESTos.popen.py
-rw-rw-r-- 1 mark mark  212 6月   5 16:05 TESTos.system.py
drwxrwxr-x 5 mark mark 4096 6月   5 14:45 venv

commands 模块:python3已经废除

使用commands模块的getoutput方法,这种方法同popend的区别在于popen返回的是一个类文件对象,而本方法将外部程序的输出结果当作字符串返回,很多情况下用起来要更方便些。
主要方法:

* commands.getstatusoutput(cmd) 返回(status, output)
* commands.getoutput(cmd) 只返回输出结果
* commands.getstatus(file) 返回ls -ld file的执行结果字符串,调用了getoutput,不建议使用此方法

subprocess模块

根据Python官方文档说明,subprocess模块用于取代上面这些模块。有一个用Python实现的并行ssh工具—mssh,代码很简短,不过很有意思,它在线程中调用subprocess启动子进程来干活。

from subprocess import call
call(["ls","-l"])

打印结果

总用量 16
-rw-rw-r-- 1 mark mark  247 6月   5 16:11 TESTos.popen.py
-rw-rw-r-- 1 mark mark  212 6月   5 16:05 TESTos.system.py
-rw-rw-r-- 1 mark mark   45 6月   5 16:17 TESTsubprocess.py
drwxrwxr-x 5 mark mark 4096 6月   5 14:45 venv

results matching ""

    No results matching ""