码迷,mamicode.com
首页 > 编程语言 > 详细

转 Python执行系统命令的方法

时间:2016-08-14 17:45:34      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:

传送门

Python执行系统命令的方法

 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   video
3 11.wmv            books     downloads   Pictures  python
4 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 subprocess
2 >>> subprocess.call (["cmd", "arg1", "arg2"],shell=True)

 

获取返回和输出:

1 import subprocess
2 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 commands
2 >>> 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 <module>
3     main()
4   File "./test1.py", line 45, in main
5     fax.sendFax()
6   File "./mailfax/Fax.py", line 13, in sendFax
7     os.popen(cmd)
8 UnicodeEncodeError: ascii codec cant encode characters in position 46-52: ordinal not inrange(128)

 

关于本文更多的延伸阅读地址:
http://zh-cn.how-to.mobi/index.php?id=89228

http://www.javaeye.com/topic/406623

 
 

转 Python执行系统命令的方法

标签:

原文地址:http://www.cnblogs.com/njczy2010/p/5770417.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!