首页 > 代码库 > 用python调用系统命令并获得返回

用python调用系统命令并获得返回

目的:有时候需要一些系统的信息或者执行不是python的文件,这时候需要通过os模块调用它们。


环境:windows 7  Python 3.5.3


情景:

1)我通过python处理生成一个系统可以直接运行的文件,如bat批处理,需要执行它;

2)我对批处理比较熟悉,想要在python执行命令并获得它的返回信息。


这两种情况都需要导入os模块:

第一种情况:

os.open(file, flags[, mode]);

可以打开系统中的文件,参数如下:

  • file --  要打开的文件

  • flags --  该参数可以是以下选项,多个使用 "|" 隔开:

    • os.O_RDONLY: 以只读的方式打开

    • os.O_WRONLY: 以只写的方式打开

    • os.O_RDWR : 以读写的方式打开

    • os.O_NONBLOCK: 打开时不阻塞

    • os.O_APPEND: 以追加的方式打开

    • os.O_CREAT: 创建并打开一个新文件

    • os.O_TRUNC: 打开一个文件并截断它的长度为零(必须有写权限)

    • os.O_EXCL: 如果指定的文件存在,返回错误

    • os.O_SHLOCK: 自动获取共享锁

    • os.O_EXLOCK: 自动获取独立锁

    • os.O_DIRECT: 消除或减少缓存效果

    • os.O_FSYNC : 同步写入

    • os.O_NOFOLLOW: 不追踪软链接

  • mode --  类似 chmod() , 这个参数在linux中常用,默认0777

返回值

返回新打开文件的描述符。

这里举两个例子:

1)类似open()操作文本文件

with os.open(‘test.txt‘, os.O_RDWR|os.O_CREAT) as f:
    os.write(f, ‘This is a test.‘)

恩,就是这样,用起来感觉比open()麻烦(链接)。


2)执行已经存在的批处理文件

os.open(‘test.bat‘)

恩,很简单的一句。


第二种情况:

os.popen(command[, mode[, bufsize]])

我想获得当前的用户名:

在windows 中 echo %username% 可以输出当前的用户名

user = os.popen(‘ echo %username%‘).read()

恩,就是这样,组合使用感觉还不错。


本文出自 “RickyHuL” 博客,请务必保留此出处http://rickyh.blog.51cto.com/10934856/1947783

用python调用系统命令并获得返回