【Python】执行系统命令的常见用法

简介:
本文总结了使用Python 程序执行系统的几种命令,介绍各个模块的优缺点。
os.system模块

仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息,如果在命令行下执行,结果直接打印出来


Python 2.6.6 (r266:84292, May 29 2014, 05:49:27) 
 
[GCC 4.4.6 20110731 (Red Hat 4.4.6-3)] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>> import os

>>> os.system('cat cont')

biz_order_id

out_order_id

buy_nick

sel_nick

buyer

sel

0

>>> out=os.system('cat cont')

biz_order_id

out_order_id

buy_nick

sel_nick

buyer

sel

>>> 

缺点: 
a.os.system() 是新起一个shell执行命令 
b.不能利用其它变量存放os.system()执行的结果,获得输出等信息比较麻烦.
c.无法控制命令执行的状态,(如果调用的外部命令,挂死或者执行时间很长),主进程无法控制os.system(), 因为调用os.system(cmd) 调用进程会block,直到 os.system()命令结束自己退出。 

os.popen模块
通过 os.popen() 返回的是 file read 的对象,对其进行读取 read() 的操作可以看到执行的输出。
例子1


>>> output = os.popen('date')
 
>>> print output

<open file 'date', mode 'r' at 0x7f7ae831e150>

>>> print output.read()

Sun Sep 13 22:34:56 CST 2015 

例子2


>>> output = os.popen('cat cont').readlines() ##返回一个数组
 
>>> print output

['biz_order_id\n', 'out_order_id\n', 'buy_nick\n', 'sel_nick\n', 'buyer\n', 'sel\n']

>>> print output[0]

biz_order_id 

优点
1 该方法不但执行命令还返回执行后的信息对象,将返回的结果赋于一变量,便于程序的处理。
缺点
1 无法获取命令的执行结果的状态。

commands模块
和os.system的执行方式类似,在子系统终端执行命令。该模块包含如下三种函数:
commands.getstatusoutput(cmd)
commands.getoutput(cmd) 返回命令的执行结果
commands.getstatus(file) 返回 ls -ld file 的执行结果。


>>> output=commands.getoutput("date")
 
>>> print output

Sun Sep 13 22:37:44 CST 2015

>>> status=commands.getstatus("date")

>>> print status

ls: cannot access date: No such file or directory

>>> commands.getstatus('/bin/ls')

'-rwxr-xr-x 1 root root 111744 May 29 2014 /bin/ls'

>>> st=commands.getstatus('/bin/ls')

>>> print st

-rwxr-xr-x 1 root root 111744 May 29 2014 /bin/ls

>>> status,output=commands.getstatusoutput("ls yy") 

>>> print status,output

512 ls: cannot access yy: No such file or directory 

优点: 
a.容易获得外部命令的结果输出和命令执行的状态 
缺点: 
b.不能利用其它变量存放os.system()执行的结果,获得输出等信息比较麻烦.
c.无法控制命令执行的状态,(如果调用的外部命令,挂死或者执行时间很长),主进程无法控制os.system(), 因为调用os.system(cmd) 调用进程会block,直到 os.system()命令结束自己退出。 
需要注意事的是 该模块已经在 python 3 中被废弃了,推荐使用 subprocess代替。

subprocess 模块
运行python的时候,我们都是在创建并运行一个进程。像Linux进程那样,一个进程可以fork一个子进程,并让这个子进程exec另外一个程序。在Python中,通过标准库中的subprocess包来fork一个子进程,并运行一个外部的程序。详细资料请参考 官方文档



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

total 20

-rwxr-xr-x 1 qilong.yangql users 14 Dec 30 2014 a

-rw-r--r-- 1 qilong.yangql users 54 Sep 13 22:22 cont

-rwxr-xr-x 1 root root 19 Jun 1 11:01 d

-rw-r--r-- 1 root root 68 Jul 7 09:45 database

drwxr-xr-x 3 qilong.yangql users 4096 Jan 11 2015 dbscripts

0

>>> subprocess.call(["ls"]) 

a cont d database dbscripts

0

>>> Popen = subprocess.Popen(["date"])

>>> Sun Sep 13 22:57:08 CST 2015

>>> Popen.pid 

优点
1 支持和子进程交互 
2 支持命令结果输出
3 可以使用kill()  ,terminate() 来控制子进程退出 
4 还有很多请参考官方文档。


相关文章
|
21天前
|
存储 人工智能 搜索推荐
【python】python用户管理系统[简易版](源码+报告)【独一无二】
【python】python用户管理系统[简易版](源码+报告)【独一无二】
|
27天前
|
Python
Python实现简易天气查询系统
Python实现简易天气查询系统
28 4
|
8天前
|
数据采集 NoSQL 搜索推荐
五一假期畅游指南:Python技术构建的热门景点分析系统解读
五一假期畅游指南:Python技术构建的热门景点分析系统解读
|
15天前
|
Python
python中threads.append的用法
将线程对象`t`添加到`threads`列表便于管理与控制线程,如等待所有线程完成。通过迭代列表并调用`join`方法,可依次等待每个线程执行完毕,实现同步。代码示例: ```python for t in threads: t.join() print(&quot;All threads are done!&quot;) ``` `join`方法使当前线程阻塞,直到线程执行结束。所有线程完成后,输出&quot;All threads are done!&quot;。
15 1
|
16天前
|
人工智能 机器人 测试技术
【Python】Python仓储管理系统(源码)【独一无二】
【Python】Python仓储管理系统(源码)【独一无二】
|
21天前
|
人工智能 机器人 测试技术
【Python】Python房屋销售系统(源码)【独一无二】(课程设计)
【Python】Python房屋销售系统(源码)【独一无二】(课程设计)
|
24天前
|
机器学习/深度学习 数据采集 算法
基于Apriori关联规则的电影推荐系统(附python代码)
这是一个基于Apriori算法的电影推荐系统概览。系统通过挖掘用户评分数据来发现关联规则,例如用户观看某部电影后可能感兴趣的其他电影。算法核心是逐层生成频繁项集并设定最小支持度阈值,之后计算规则的置信度。案例中展示了数据预处理、频繁项集生成以及规则提取的过程,具体包括用户评分电影的统计分析,如1-5部电影的评分组合。最后,通过Python代码展示了Apriori算法的实现,生成推荐规则,并给出了一个简单的推荐示例。整个过程旨在提高推荐的精准度,基于用户已评分的电影推测他们可能尚未评分但可能喜欢的电影。
基于Apriori关联规则的电影推荐系统(附python代码)
|
27天前
|
Python
Python实现简易文件管理系统
Python实现简易文件管理系统
27 5
|
27天前
|
JSON 数据格式 Python
13 Python 阶段性总结抽奖系统(文末附代码地址)
13 Python 阶段性总结抽奖系统(文末附代码地址)
54 0
13 Python 阶段性总结抽奖系统(文末附代码地址)
|
1月前
|
开发者 Python
Python语言的导入系统
Python语言的导入系统