首页 >行情 > 正文

Python中os.system()、subprocess.run()、call()、check_output()的用法

2023-07-06 21:21:21

1.os.system()

os.system() 是对 C 语言中 system() 系统函数的封装,允许执行一条命令,并返回退出码(exit code),命令输出的内容会直接打印到屏幕上,无法直接获取。

示例:


(资料图)

# test.pyimport osos.system("ls -l | grep test")    # 允许管道符# 测试执行$ ll                <======== 列出当前目录中的内容drwxr-xr-x 2 foo foo 4096 Feb 13 09:09 __pycache__-rw-r--r-- 1 foo foo  359 Feb 19 09:21 test.py$ python test.py-rw-r--r-- 1 foo foo  359 Feb 19 09:21 test.py    <======== 只有名字包含 test 的文件被列出

2.subprocess.run()

Python 3.5 开始推荐使用这个方法执行命令,其原型如下:

subprocess.run(    args, *, stdin=None, input=None, stdout=None, stderr=None, capture_output=False,     shell=False, cwd=None, timeout=None, check=False, encoding=None, errors=None,     text=None, env=None, universal_newlines=None)

其中:

该方法返回一个 CompletedProcess 对象,其中包含以下属性:

示例:

import subprocesssubprocess.run(["ls", "-l"])            # 默认时,args 参数需是一个列表subprocess.run("ls -l", shell=True)     # 当 shell 为 True 时,args 是一个字符串ret = subprocess.run("ls -l", shell=True, capture_output=True, text=True) # 以文本模式捕获输出内容print("Return code:", ret.returncode)   # Return code: 0print("STDOUT:", ret.stdout)            # STDOUT: ...当前目录内容...print("STDERR:", ret.stderr)            # STDERR: <空>ret = subprocess.run("abcdefg", shell=True, text=True,  # 注意:这里必须 shell=True 才能捕获到 /bin/sh 的输出错误        # 当 shell=False 时,是要去捕获 "abcdefg" 命令自身输出的内容,但是它不存在,python 会报错    stdout=subprocess.PIPE, stderr=subprocess.STDOUT    # 标准错误重定向到标准输出) print("STDOUT:", ret.stdout)            # STDOUT: /bin/sh: abcdefg: command not found

另一个用于测试 shell 参数区别的示例如下:

import sys, re, subprocessif len(sys.argv) == 1:  # parent process    cmd = ["python", sys.argv[0], "--run-child"]        ret = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)    print(ret) # CompletedProcess(args=["python", "test.py", "--run-child"], returncode=0, stdout="stdout output\n", stderr="stderr output")    assert re.match("stdout output", ret.stdout)    assert re.match("stderr output", ret.stderr)    # 如果 cmd 中的命令不存在,这里是捕获不到的,subprocess.run()自己就会报错        ret = subprocess.run(" ".join(cmd), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)    print(ret) # CompletedProcess(args="python test.py --run-child", returncode=0, stdout="stdout output\n", stderr="stderr output")    assert re.match("stdout output", ret.stdout)    assert re.match("stderr output", ret.stderr)    # 如果 cmd 中的命令不存在,这里也是可以捕获到的,内容可能是 xxx command not found        print("Passed!")else:                   # child process    print("stdout output")    sys.stderr.write("stderr output")

3.subprocess.call()

Python 3.5 以前(包括 2.x 版本)没有 subprocess.run() 方法,可以使用 subprocess.call() 来执行命令,该方法原型如下:

subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False, cwd=None, timeout=None)

注意:这个方法的返回值是命令的退出码,而不是一个对象,所以无法像 subprocess.run() 一样捕获命令输出内容(不要设置 stdout=PIPE 或 stderr=PIPE,否则可能造成命令卡死)。

该方法的其它参数与 subprocess.run() 类似。

4.subprocess.check_output()

Python 3.5 以前的版本,要想捕获命令输出内容,可以使用 subprocess.check_output() 方法,它的原型如下:

subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, cwd=None, encoding=None, errors=None, universal_newlines=None, timeout=None, text=None)

注意:参数中没有 stdout ,因为这个函数的返回值默认就是标准输出内容,也可以将设置 stderr=subprocess.STDOUT 将标准错误重定向到标准输出,但是好像没有办法单独捕获标准错误内容呢!

示例:

import sys, re, subprocess#Python小白学习交流群:711312441if len(sys.argv) == 1:  # parent process    cmd = ["python", sys.argv[0], "--run-child"]    ret = subprocess.check_output(cmd, stderr=subprocess.STDOUT)    print("[" + ret + "]")  # 输出内容中包含标准输出和标准错误,输出顺序在 windows 下和 linux 下可能会有差异    assert re.search("stdout output", ret)    assert re.search("stderr output", ret)    print("Passed!")else:                   # child process    print("stdout output")    sys.stderr.write("stderr output")
上一篇:墨西哥发生公共汽车坠崖事故致29死 下一篇:最后一页
x
推荐阅读

Python中os.system()、subprocess.run()、call()、check_output()的用法

博客园 2023-07-06

墨西哥发生公共汽车坠崖事故致29死

北京日报客户端 2023-07-06

河南国际物流商会赴郑州利来参观学习

大河报网 2023-07-06

龙虎榜|章盟主接力云南锗业,方新侠上车拓维信息,西湖国贸出逃南方精工

金融界 2023-07-06

《潜水员戴夫》肝帝向料理推荐 料理选择思路

游侠网 2023-07-06

法国骚乱趋于平息,政府考虑加强社媒监管

广州日报 2023-07-06

动力电池企业该如何迎接TWh时代

懂车帝 2023-07-06

校企达成5个协议,中国研究生教育长江论坛武昌区专场活动正式对接

长江日报 2023-07-06

【全球播资讯】【华侨报】世界内河平面尺寸最大船闸首次大规模清淤

中新网广西 2023-07-06

主治医生:热射病病死率高 户外旅游千万别大意

新民晚报 2023-07-06

天天看点:高价防晒服是智商税吗?专家:高价的效果未必更好,物理防晒需经济高效

北京晚报 2023-07-06

7月6日中石化西布尔丁腈橡胶价格暂稳

生意社 2023-07-06

世界焦点!美国巴尔的摩(关于美国巴尔的摩的基本详情介绍)

互联网 2023-07-06

全球今头条!小米汽车北京工厂部分竣工,供应商透露最新进展:小米第一款车型已报价完毕

九派财经 2023-07-06

赤壁市车埠镇:十亩西瓜田 丰收乐开颜-天天头条

湖北日报客户端 2023-07-06

海南海口房子适合投资吗,恒大海口文化城可以买吗?

海南二手房地产网 2023-07-06

全球看点:广东公办本科高校2023年招生计划汇总!

个人图书馆-悟道谈风水 2023-07-06

刘芮麟突破自我,出演《梦中的那片海》中备受争议的男二号 今日快看

羊城晚报 2023-07-06

京津冀:滦平“政企研”合作助县域经济发展 世界观热点

北京日报 2023-07-06

高血压的诊断标准变了,不再是140和90?很多人都不在正常范围内|全球短讯

山东讯息 2023-07-06

邵老爷大乐透076期:前区定位龙头凤尾看好02和35

彩票资讯 2023-07-06

滚动:云南省昆明市官渡区建设便民党群服务中心 不出社区,也能办很多事

人民日报 2023-07-06

trueend什么意思中文(true end)

互联网 2023-07-06

西安地铁15号线项目祝村站~郭杜西站盾构区间右线顺利贯通|动态

中国基建报 2023-07-06

合(肥)庐(江)快速通道最后一环即将开工

大皖新闻 2023-07-06

世界微资讯!波罗的海干散货运价指数跌逾4%,至一个月低位

钛媒体官方 2023-07-05

【国际漫评】法国骚乱让美媒很兴奋啊! 焦点速讯

国际在线 2023-07-05

边检口岸多种查验模式助力跨境货运 提振边境贸易企业信心

红网 2023-07-05

衡阳县:渣江“假羊肉” 食完方知衡阳“辣” 每日视点

北青网 2023-07-05

武汉自如人才公寓在哪里看? 全球聚看点

本地宝 2023-07-05

环球要闻:平价好用的护肤品

互联网 2023-07-05

恸哭奇机什么时候上线 恸哭奇机发售时间介绍_天天热消息

互联网 2023-07-05

山海有约,乐享自驾!又一盛会在山东威海召开

齐鲁壹点 2023-07-05

世界最资讯丨减速器概念股持续走低,昊志机电逼近20CM跌停

界面新闻 2023-07-05

天阳科技:拟向参股公司和顺恒通增资1500万元 加快中小银行的金融科技产业链建设-世界热文

界面新闻 2023-07-05

今日热闻!疯狂的中药材:淡季暴涨的天然牛黄

21世纪经济报道 2023-07-05

【环球新要闻】2023佛山南海里水镇插班生学位安排办法

本地宝 2023-07-05

《消失的她》破25亿又双叒逆跌,热词背后是什么?

影视音乐 2023-07-05

每日速递:强降雨导致四川46.1万人受灾 重庆多条河流出现超警超保洪水

新华社 2023-07-05

环球焦点!金之平视线:打开文化“景深”——以文塑旅、以旅彰文

天津日报 2023-07-05

焦点信息:有些小事助减压 闲暇时间常做做

家庭医学 2023-07-05

绍兴城南乡成立“乡理乡亲”服务集市为民解纷

北青网 2023-07-05

本科毕业考核竟然是打导弹!网友:补考需要自费吗?-世界速读

人民网 2023-07-05

世界滚动:非独立悬架的优缺点(独立悬架和非独立悬架的优缺点)

互联网 2023-07-05

全球快讯:消脂瘦身汤

互联网 2023-07-05

母亲节的贺卡怎么做最好又简单_母亲节的贺卡怎么做 天天新动态

互联网 2023-07-05

强降雨导致四川46.1万人受灾 重庆多条河流出现超警超保洪水-世界独家

新华社 2023-07-04

青平:让尊重劳动蔚然成风

中国青年报 2023-07-04

朝华贝贝认知丛书 0-1岁(对于朝华贝贝认知丛书 0-1岁简单介绍)

互联网 2023-07-04

东方钽业接待深圳纽富斯投资有限公司等多家机构调研_最新快讯

东方财富Choice数据 2023-07-04

南非驻华大使:金砖国家要避免被迫选边站队,以和平解决冲突推动人类共同发展

中国网 2023-07-04

蓝天白云常做伴,绿水青山入画来-每日快讯

齐鲁晚报网 2023-07-04

焦点信息:中兴通讯(000063)7月4日主力资金净卖出3.88亿元

证券之星 2023-07-04

明天7月5日生肖运势;生肖牛,生肖蛇,生肖狗,财运大涨。-今日看点

搜狐 2023-07-04

全球热头条丨警企协同 陕西移动助力警方破获一起电信网络诈骗案

腾讯网 2023-07-04

天天热讯:上半年房企销售榜出炉:千亿以上7家,一线城市业绩贡献持续增长

腾讯网 2023-07-04

蚂蚁庄园今日答题答案(刨丁解牛蚂蚁庄园) 快播报

互联网 2023-07-04

天天报道:一方起诉重婚能判离婚吗

找法网 2023-07-04

电影《扫毒3:人在天涯》预售总票房突破1000万元

界面新闻 2023-07-04

核心服务_关于核心服务概略

互联网 2023-07-04

为奋斗的你加把劲|山东安华农险组织开展“唱响新征程,绿色环保跑”活动

齐鲁壹点 2023-07-04

地产股连续下挫,地产ETF(159707)一度重挫2%,销售数据成下跌元凶?机构预测:更多放松政策或在三季度释放 环球热资讯

搜狐号-资本邦 2023-07-04

汽车机油一般多少时间换一次_汽车机油应该多少时间更换一次

互联网 2023-07-04

太平鸟:7月3日融资买入157.73万元,融资融券余额1.63亿元

证券之星 2023-07-04

环球热文:天麻,三七,西洋参,铁皮枫斗功效(铁皮枫斗功效)

互联网 2023-07-04

拼手速!这节免费好课即将开放预约→

上海虹口 2023-07-04

布里斯班现在的房价增长表现排名第二

互联网 2023-07-04

乌贼是四维空间生物嘛(乌贼是四维空间生物)

互联网 2023-07-04

沪深股通|西部超导7月3日获外资卖出0.03%股份-天天热资讯

同花顺iNews 2023-07-04

全球讯息:上半年证监会开出181张罚单 私募违法违规罚单明显增多

证券日报 2023-07-04

江京华

互联网 2023-07-04

法国骚乱使公共交通及商业面临巨大损失|天天热议

财联社 2023-07-04

开到荼靡这句话是什么意思 开到荼靡这句话是啥意思|天天简讯

互联网 2023-07-04

卜是多音字吗_卜多音字

互联网 2023-07-04

斯里兰卡债务谈判请求减免30%

进击小财女 2023-07-03

全球热文:两盘抢七大战惜败!温网首轮爆大冷,首位出局种子选手出现

全景体育 2023-07-03

网友, 张雪峰说没有高层领导介绍的话, 报考这个专业就没有必要 实时

范范的简单味道 2023-07-03

全球速读:*ST美谷:奥园科星所持公司7.50%股份已被司法拍卖

金融界 2023-07-03

最贵的香水_最贵的香水

互联网 2023-07-03

侨银股份:侨银转债剩余可转债余额约为4.2亿元

每日经济新闻 2023-07-03

【播资讯】恒生指数将剔除华兴资本等5只长期停牌成份股

界面新闻 2023-07-03

世界热议:AirPods将迎来一系列改进:USB-C、支持听力、体温检测、配合头显

硬顶科技 2023-07-03

世界球精选!悦心健康:控股股东减持套现约8134.67万元 拟继续减持不超2%公司股份

界面新闻 2023-07-03

注意!吉电股份将于7月19日召开股东大会 天天观点

每日经济新闻 2023-07-03

受让中信信托所持股权 中信金控增持中信消费金融股权至70% 环球快资讯

澎湃新闻 2023-07-03

快资讯:刚刚!内江市气象台发布大风短时临近天气预报

内江头条 2023-07-03

外交部:中国-非洲经贸博览会成果丰硕

央视新闻客户端 2023-07-03

深圳市DOD科技实业 电子有限公司(关于深圳市DOD科技实业 电子有限公司介绍)

互联网 2023-07-03

焦点资讯:重庆新开工一批重大电源项目 总投资约113亿元

中国新闻网 2023-07-03

涉案金额近千万!长沙打掉一潮牌售假团伙,很多人爱穿…… 热点在线

潇湘晨报 2023-07-03

【环球时快讯】海控B股7月3日快速回调

东方财富Choice数据 2023-07-03

“公园+商业+消费”带动就业 经济效益逐步显现

央视网 2023-07-03

2022春节档电影全部(星汉灿烂为什么是春节档)|世界今日讯

互联网 2023-07-03

日本内阁官房长官称夏季排放福岛核污染水的计划未变 环球时快讯

极目新闻 2023-07-03

出轨的女人下载_出轨的女人视频 全球微动态

互联网 2023-07-03

7000万欧!利物浦官宣第2签:匈牙利小贝穿传奇8号

凤凰网 2023-07-03

复盘大事件!“三万亿”苹果是怎样炼成的?!(附时间轴)

证券时报 2023-07-03

每日观点:新相微:公司产品已广泛应用于惠普、戴尔、长虹等知名终端品牌

界面新闻 2023-07-03

一级建造师《项目管理》必考题:建设工程索赔 天天新视野

永图教育 2023-07-03

微信赠送免费提现券:7天领一次 环球即时看

中关村在线 2023-07-03