博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
转 Python执行系统命令的方法
阅读量:6239 次
发布时间:2019-06-22

本文共 2041 字,大约阅读时间需要 6 分钟。

 Python中执行系统命令常见方法有两种:

两者均需 import os

(1) os.system

# 仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息

system(command) -> exit_status

Execute the command (a string) in a subshell.

# 如果再命令行下执行,结果直接打印出来

1 >>> os.system('ls')2 04101419778.CHM   bash      document    media      py-django   video3 11.wmv            books     downloads   Pictures  python4 all-20061022      Desktop   Examples    project    tools

 

(2) os.popen

# 该方法不但执行命令还返回执行后的信息对象

popen(command [, mode='r' [, bufsize]]) -> pipe

Open a pipe to/from a command returning a file object.

例如:

1 >>>tmp = os.popen('ls *.py').readlines() 2 >>>tmp 3 Out[21]: 4 ['dump_db_pickle.py ', 5 'dump_db_pickle_recs.py ', 6 'dump_db_shelve.py ', 7 'initdata.py ', 8 '__init__.py ', 9 'make_db_pickle.py ',10 'make_db_pickle_recs.py ',11 'make_db_shelve.py ',12 'peopleinteract_query.py ',13 'reader.py ',14 'testargv.py ',15 'teststreams.py ',16 'update_db_pickle.py ',17 'writer.py ']

 

好处在于:将返回的结果赋于一变量,便于程序的处理。

(3)  使用模块subprocess

1 >>> import subprocess2 >>> subprocess.call (["cmd", "arg1", "arg2"],shell=True)

 

获取返回和输出:

1 import subprocess2 p = subprocess.Popen('ls', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)3 for line in p.stdout.readlines():4     print line,5 retval = p.wait()

 

(4)  使用模块commands模块

1 >>> import commands2 >>> dir(commands)3 ['__all__', '__builtins__', '__doc__', '__file__', '__name__', 'getoutput', 'getstatus','getstatusoutput', 'mk2arg', 'mkarg']4 >>> commands.getoutput("date")5 'Wed Jun 10 19:39:57 CST 2009'6 >>>7 >>> commands.getstatusoutput("date")8 (0, 'Wed Jun 10 19:40:41 CST 2009')

 

注意: 当执行命令的参数或者返回中包含了中文文字,那么建议使用subprocess,如果使用os.popen则会出现下面的错误:

1 Traceback (most recent call last):2   File "./test1.py", line 56, in 
3 main()4 File "./test1.py", line 45, in main5 fax.sendFax()6 File "./mailfax/Fax.py", line 13, in sendFax7 os.popen(cmd)8 UnicodeEncodeError: 'ascii' codec can't encode characters in position 46-52: ordinal not inrange(128)

 

关于本文更多的延伸阅读地址:

 
 
标签:  ,  ,  , 

转载于:https://www.cnblogs.com/njczy2010/p/5770417.html

你可能感兴趣的文章
uniupload mapping
查看>>
问题(1)
查看>>
python发邮件
查看>>
Linux系统管理笔记
查看>>
Spring Cloud和聚合工程架构设计微服务框架
查看>>
Java 内部类
查看>>
java对list中对象的属性排序
查看>>
RabbitMQ的消息确认机制(事务+confirm)
查看>>
C Primer Plus 第4章 字符串和格式化输入输出4.4 printf()和scanf()
查看>>
第14章 结构和其他数据形式 14.6 指向结构的指针
查看>>
FLUSH PRIVILEGES
查看>>
CI3如何使用controller继承
查看>>
Moodle介绍篇
查看>>
nagios部署
查看>>
CentOS 内核升级步骤和方法
查看>>
俄罗斯方块,算法简单 注释详细,大家运行玩玩
查看>>
centos6.5 iptables 配置
查看>>
tuxera NTFS 2016支持macOS 10.12 Sierra
查看>>
ftpclient 上传下载文件
查看>>
JQuery 获取touchstart,touchmove,touchend 坐标
查看>>