python调用外部程序

os.system

import os
cmd = r'd:/tools/wget http://mirrors.shou.com/nginx/nginx-1.13.9.zip'
os.system(cmd)
import os

version = input('请输入安装包版本:')
cmd = fr'd:\tools\wget http://mirrors.sohu.com/nginx/nginx-{version}.zip'
os.system(cmd)

print('下载完毕')

os.system 函数调用外部程序的时候, 必须要等被调用程序执行结束, 才会接着往下执行代码。 否则就会一直等待。os.system 函数没法获取 被调用程序输出到终端窗口的内容。

os.startfile

打开excel文件

os.startfile('d:/xx.xlsx')

subprocess

可以获取外部程序输出到屏幕的内容。

from subprocess import PIPE, Popen

# 返回的是 Popen 实例对象
proc = Popen(
    'fsutil volume diskfree c:',
    stdin  = None,
    stdout = PIPE,
    stderr = PIPE,
    shell=True)

# communicate 方法返回 输出到 标准输出 和 标准错误 的字节串内容
# 标准输出设备和 标准错误设备 当前都是本终端设备
outinfo, errinfo = proc.communicate()

# 注意返回的内容是bytes 不是 str ,我的是中文windows,所以用gbk解码
outinfo = outinfo.decode('gbk')
errinfo = errinfo.decode('gbk')
print (outinfo)
print ('-------------')
print (errinfo)

outputList = outinfo.splitlines()

# 剩余量
free  = int(outputList[0].split(':')[1].replace(',','').split('(')[0].strip())

# 总空间
total = int(outputList[1].split(':')[1].replace(',','').split('(')[0].strip())

if (free/total < 0.1):
    print('!! 剩余空间告急!!')
else:
    print('剩余空间足够')

其中communicate方法会返回两个字符串对象。分别对应被调用程序输出到标准输出和标准错误的字符串内容。

这个方法返回的就是 屏幕上显示的内容。但是这个返回的是 bytes 字串,不是 str 字串。

前面我们已经学过,bytes要解码为str,就需要调用 decode方法。 我的是中文windows,所以通常外部程序输出的都是gbk编码的字节串。 所以参数指定为gbk。

  • 启动外部程序后,不需要等待外部程序结束。

from subprocess import Popen
proc = Popen(
        args='wget http://xxxxserver/xxxx.zip',
        shell=True
    )

print ('让它下载,我们接下来做其他事情。。。。')

你可能感兴趣的:(python,python)