Python执行脚本方法都有哪些
admin
2023-02-23 10:00:04
0

Python中调用shell脚本,常用的函数有os.system、os.popen()和subprocess.Popen()

  1. os.system方法
    语法:os.system(cmd)
    os.system()执行过程中主要执行了:fork()出一子进程;子进程调用exec()执行命令。
    例1:

    >>> import os
    >>> os.system('dir D:\Python')

    Python执行脚本方法都有哪些
    执行成功,返回0。
    例2:

    import os
    res = os.system('ping www.baidu.com -n 3')
    if res == 0:
    print('成功')
    else:
    print('失败了')

    执行结果:
    Python执行脚本方法都有哪些
    注:
    1).os.system()执行cmd指令,返回结果0表示执行成功,返回1表示失败。
    2).os.system()无法获取在cmd输出的内容。
    3).os.system()调用外部系统命令,返回命令结果码,无法获取命令执行输出结果。

  2. os.popen方法
    语法:popen(cmd, mode='r', buffering = -1)
    参数:  

    cmd:要执行的命令。
    mode:打开文件的模式,默认为'r',用法与open()相同。
    buffering:(可选参数),0表无缓冲;1表行缓冲;-1表默认缓冲值;

    os.popen()方法会打开一管道,返回结果是一连接管道的文件对象。执行成功返回文件对象中读取的返回结果,不返回状态码。执行失败,返回执行的错误信息。并且返回结果可赋于一变量,便于程序的处理。
    例1:
    文件内容:D:\Python\test.py

    print('popen()测试')

    文件内容:D:\Python\test2.py

    res = os.popen(r'D:\Python\test.py', mode='r')
    res1 = res.read()       #返回结果赋于一变量,便于程序的处理
    print(res1)   
    print(type(res1))     #返回str
    res.close()

    python D:\Python\test2.py 执行结果:
    Python执行脚本方法都有哪些

  3. subprocess模块
    os.system、os.popen实现的功能在subprocess模块都可实现,推荐使用。并且subprocess模块还可调用外部系统命令来创建新子进程。subprocess执行系统命令的时候并不会让主进程去执行,而是主进程会开辟fork()出一个子进程去执行,并不会影响到主进程的运行。
    subprocess模块主要有call()、Popen()函数。
    3.1 subprocess.Popen()函数
    语法:

    subprocess.Popen(args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags)

    args:要调用的外部系统命令。
    bufsize:默认值为0, 表示不缓存;为1表示行缓存;其他正数表示缓存使用的大小;负数-1表示使用系统默认的缓存大小。
    stdin、stdout、stderr:分别表示标准输入、标准输出和标准错误。其值有PIPE、文件描述符和None等。默认值为None,表示从父进程继承。
    shell:Linux中参数值为False时,Linux上通过调用os.execvp执行对应的程序。True时,Linux上直接调用系统shell来执行程序。Windows中参数shell设为true,程序将通过shell来执行。
    cwd:设置子进程当前目录。
    env:env是字典类型,指定子进程的环境变量。默认值为None,表示子进程的环境变量将从父进程中继承。
    subprocess.PIPE:在创建Popen对象时,subprocess.PIPE可以初始化stdin, stdout或stderr参数,表示与子进程通信的标准流。执行结果丢到管道(共享内存空间,用于进程之间共享)。
    例1:

    cmd = 'ipconfig | findstr "192.168.1.128"'
    p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)    #将正确的执行结果丢到管道中。
    res = p.stdout.read().decode('gbk')    #主进程去管道里获取正确stdout的结果,并将获取的结果的bytes类型转换。
    print(res)
    print(type(res))

    Python执行脚本方法都有哪些
    subprocess.Popen()方法与os.popen()相比较,os.popen()获取的输出结果是直接可读的,而subprocess.Popen()获取的输出结果是以二进制形式的且会有换行符。
    3.2 subprocess.call()函数
    调用外部系统命令,并返回执行结果码。功能类似于os.system(cmd)。0表示执行成功,返回1表示失败。
    例子2:

    import subprocess
    res = subprocess.call('ping www.baidu.com', shell=True)
    print('>>> ping www.baidu.com')
    print('测试res:', res)

    结果:
    Python执行脚本方法都有哪些

相关内容

热门资讯

瑞士确诊、法国密接、西班牙待命... 综合法媒报道,国际探险邮轮“洪迪厄斯”号上的汉坦病毒事件,正从南美航程延伸至欧洲语境。最新进展显示,...
AMD锐龙X3D快到把游戏跑崩... 快科技5月6日消息,在Apex英雄最新Overclocked补丁中,修复了一个颇为尴尬的问题:AMD...
重磅|第十九届智慧城市大会将于... 2026年7月16日-18日,第十九届智慧城市大会将在天津社会山国际会议中心举办。本届大会由中国服务...
奥巴马暗批特朗普:不应将司法与... 美国前总统奥巴马近日在接受采访时,借列举总统权力被滥用的多个例子,含蓄批评总统特朗普,但全程未直接点...
三星宣布:在中国大陆市场停止销... 【大河财立方消息】5月6日,三星(中国)投资有限公司发布通知称,为应对急剧变化的市场环境,经慎重研究...
郑州商转公“直还”扩容!80家... 【大河财立方消息】5月6日,郑州住房公积金管理中心公告,13家银行已与郑州住房公积金管理中心签订《商...
男子花数十万买回犀牛角、熊胆,... 王绍斌至今想不通,自己是个三十多年的生意人,怎么会在老挝一下子刷出去六位数,买回来两片犀牛角、半块熊...
电动汽车充电量创历史新高!河南... 【大河财立方 记者 张克瑶】5月6日,大河财立方记者从河南省住房和城乡建设厅获悉,2026年“五一”...
为快乐买单,情绪经济如何“点燃... 【大河财立方 记者 王宁宁 文图】从强势出圈的丑萌潮玩LABUBU,到年轻人的解压新宠“网红”拼豆;...
前微软首席技术专家创办,智用开... 瑞财经 李兰 近日,据智用开物微信公众号,智用开物获近亿元天使+轮融资,由老股东瑞枫资本领投,创享投...