Python执行Linux系统命令的4种方法

本站所有内容来自互联网收集,仅供学习和交流,请勿用于商业用途。如有侵权、不妥之处,请第一时间联系我们删除!Q群:迪思分享

免费资源网 – https://freexyz.cn/

(1) os.system

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

复制代码

代码如下:

system(command) -> exit_status

Execute the command (a string) in a subshell.

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

复制代码

代码如下:

>>> os.system(ls)

04101419778.CHM   bash      document    media      py-django   video

11.wmv            books     downloads   Pictures  python

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.

例如:

复制代码

代码如下:

>>>tmp = os.popen(ls *.py).readlines()

>>>tmp

Out[21]:

[dump_db_pickle.py ,

dump_db_pickle_recs.py ,

dump_db_shelve.py ,

initdata.py ,

__init__.py ,

make_db_pickle.py ,

make_db_pickle_recs.py ,

make_db_shelve.py ,

peopleinteract_query.py ,

reader.py ,

testargv.py ,

teststreams.py ,

update_db_pickle.py ,

writer.py ]

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

(3)  使用模块 subprocess

复制代码

代码如下:

>>> import subprocess

>>> subprocess.call([“cmd”, “arg1”, “arg2”],shell=True)

获取返回和输出:

复制代码

代码如下:

import subprocess

p = subprocess.Popen(ls, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

for line in p.stdout.readlines():

    print line,

retval = p.wait()

(4)  使用模块 commands

复制代码

代码如下:

>>> import commands

>>> dir(commands)

[__all__, __builtins__, __doc__, __file__, __name__, getoutput, getstatus,getstatusoutput, mk2arg, mkarg]

>>> commands.getoutput(“date”)

Wed Jun 10 19:39:57 CST 2009

>>>

>>> commands.getstatusoutput(“date”)

(0, Wed Jun 10 19:40:41 CST 2009)

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

复制代码

代码如下:

Traceback (most recent call last):

  File “./test1.py”, line 56, inmain()

File “./test1.py”, line 45, in main

    fax.sendFax()

  File “./mailfax/Fax.py”, line 13, in sendFax

    os.popen(cmd)

UnicodeEncodeError: ascii codec cant encode characters in position 46-52: ordinal not inrange(128)

免费资源网 – https://freexyz.cn/


© 版权声明
THE END
★喜欢这篇文章吗?喜欢的话,麻烦动动手指支持一下!★
点赞12 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容