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