Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python调用外部系统命令

Python调用外部系统命令

原创
作者头像
Python学习者
发布于 2023-07-04 08:27:26
发布于 2023-07-04 08:27:26
38700
代码可运行
举报
文章被收录于专栏:Python学习者Python学习者
运行总次数:0
代码可运行

利用Python调用外部系统命令的方法可以提高编码效率。调用外部系统命令完成后可以通过获取命令执行返回结果码、命令执行的输出结果进行进一步的处理。本文主要描述Python常见的调用外部系统命令的方法,包括os.system()、os.popen()、subprocess.Popen()等。

本文分析python调用外部系统命令主要从两个方面考虑:

1、是不是可以返回命令执行结果码,因为大部分场景都需要通过判断调用命令是执行成功还是失败。

2、是不是可以获取命令执行结果。某些场景调用外部命令就是为获取输出结果,也可以通过输出结果来判断命令执行成功还是失败。分析结果如下:

下面再针对每一个函数使用方法和实例进行详细描述。

1、subprocess模块

优先介绍subprocess模块的是由于该模块可以替代旧模块的方法,如os.system()、os.popen()等,推荐使用。subporcess模块可以调用外部系统命令来创建新子进程,同时可以连接到子进程的nput/output/error管道上,并得到子进程的返回值。

subprocess模块主要有call()、check_call()、check_output()、Popen()函数,简要描述如下:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
Main API
    ========
    call(...): Runs a command, waits for it to complete, then returns the return code.
    check_call(...): Same as call() but raises CalledProcessError() if return code is not 0
    check_output(...): Same as check_call() but returns the contents of stdout instead of a return code
    Popen(...): A class for flexibly executing a command in a new process
    
    Constants
    ---------
    PIPE:    Special value that indicates a pipe should be created
    STDOUT:  Special value that indicates that stderr should go to stdout

下面开始介绍subprocess函数的使用方法。

(1)subprocess.Popen类

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)  

参数说明:

  • args: 要调用的外部系统命令。
  • bufsize: 默认值为0, 表示不缓存,。为1表示行缓存,。其他正数表示缓存使用的大小,,负数-1表示使用系统默认的缓存大小。
  • stdin、stdout、stdout 分别表示标准输入、标准输出和标准错误。其值可以为PIPE、文件描述符和None等。默认值为None,表示从父进程继承。
  • shell Linux:参数值为False时,Linux上通过调用os.execvp执行对应的程序。为Trule时,Linux上直接调用系统shell来执行程序。 Windows:shell参数表示是否使用bat作为执行环境。只有执行windows的dir、copy等命令时才需要设置为True。其他程序没有区别。
  • executable 用于指定可执行程序。一般情况下我们通过args参数来设置所要运行的程序。如果将参数shell设为 True,executable将指定程序使用的shell。在windows平台下,默认的shell由COMSPEC环境变量来指定。
  • preexec_fn 只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用
  • cwd 设置子进程当前目录
  • env env是字典类型,用于指定子进程的环境变量。默认值为None,表示子进程的环境变量将从父进程中继承。
  • Universal_newlines 不同操作系统下,文本的换行符是不一样的。如:windows下用’/r/n’表示换,而Linux下用 ‘/n’。如果将此参数设置为True,Python统一把这些换行符当作’/n’来处理。

Popen对象对应的属性和方法如下:

属性:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
  stdin, stdout, stderr, pid, returncode

方法:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
  communicate(self, input=None) -> returns a tuple (stdout, stderr).
  wait(self) -> Wait for child process to terminate.  Returns returncode attribute.

常用实例

1、打印D:\temp目录下创建test目录。直接调用进程,不考虑获取调用命令输出内容和结果码

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import subprocess

p = subprocess.Popen(args='mkdir test', shell=True, cwd='d:/temp')
p.wait()

2、调用ping命令执行,获取命令执行输出内容

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import subprocess

p = subprocess.Popen(args='ping -n 2 -w 3 192.168.1.104', stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
p.wait()
print (p.stdout.read())

明:p.stdout、p.stdin、p.stderr为文件对象,可以使用文件对象函数,如read()。

2)subprocess.call()

函数原型:call(*popenargs, **kwargs)。call()调用外部系统命令执行,并返回程序执行结果码。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import subprocess

retcode = subprocess.call('ping -n 2 -w 3 192.168.1.104', shell=True)
print (retcode)

(3)subprocess.check_call()

使用方法同call()。如果调用命令执行成功,返回结果码0,如果执行失败,抛出CalledProcessError.异常。

举例如下:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
>>> p = subprocess.check_call('ping -n 2 -w 3 192.168.1.105', shell=True)

正在 Ping 192.168.1.105 具有 32 字节的数据:
请求超时。
请求超时。

192.168.1.105 的 Ping 统计信息:
    数据包: 已发送 = 2,已接收 = 0,丢失 = 2 (100% 丢失),
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "c:\Python27\lib\subprocess.py", line 186, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command 'ping -n 2 -w 3 192.168.1.105' returned non-zero exit status 1

(4)subprocess.check_output()

函数原型:check_output(*popenargs, **kwargs)。用法与call()相同。区别是如果执行成功返回的是标准输出内容。如果失败,抛CalledProcessError.异常。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import subprocess

output = subprocess.check_output('ping -n 2 -w 3 192.168.1.104', shell=True)
print(output)

2、os模块

(1)os.system()

os.system(command) 。调用外部系统命令,返回命令结果码,但是无法获取命令执行输出结果,输出结果直接打印到屏幕终端。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import os

retcode = os.system('ping -n 2 -w 3 192.168.1.104')
if retcode == 0:
    print ("%s Success" % (ip,))
else:
    print ("%s Fail" % (ip,))

(2)os.popen()

os.popen(command) 。调用外部系统命令,返回命令执行输出结果,但不返回结果吗

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import os

#学习中遇到问题没人解答?小编创建了一个Python学习交流群:711312441
output = os.popen('ping -n 2 -w 3 192.168.1.104')
print (output)

3、commands模块

commands模块用于调用Linux shell命令。测试了下在windows上执行失败。主要有如下3个函数

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
getoutput(cmd): Return output (stdout or stderr) of executing cmd in a shell.
getstatus(file):Return output of "ls -ld <file>" in a string.
getstatusoutput(cmd):Return (status, output) of executing cmd in a shell.

使用实例如下:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import commands

retcode, output = commands.getstatusoutput('ping -n 2 -w 3 192.168.1.104')
print (retcode)
print (output)

总结

在编写程序时可根据使用场景来选择不同的Python调用方法来执行外部系统命令。对于复杂的命令考虑使用subprocess.Popen()完成,如果仅是简单的命令执行,可以使用os.system()完成,如调用windows的暂停程序命令os.system('pause')。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
虚拟宠物,虚拟人和虚拟永生
几周前在圣地亚哥举行的高通无线活动有趣且有点被低估的一个方面是,5G 将使逼真的现实影像成为可能。之所以有可能实现这种进步,因为带宽高,延迟非常低,处理可能会从设备转移到云。再加上分布式数据中心的推出,为了降低延迟,这意味着您可以拥有逼真的虚拟宠物和朋友,甚至几乎可以访问远程位置。使用虚拟现实,你不仅能感觉到你在那里,而且也显示在那里的人作为你的头像,而不是作为无人机或机器人为您提供的经验。
甜甜圈
2020/12/04
1.5K0
机器人落地「秘诀」:持续学习、知识迁移和自主参与
亚马逊机器人实验室的三位顶级科学家,在 ICRA 会议上探讨了机器人的现有挑战。 编译 | 刘冰一 编辑 | 陈彩娴 2022年5月23日,一年一度的机器人技术领域的顶级国际会议 ICRA 2022 (IEEE International Conference on Robotics and Automation) 在美国费城如期举行。 这是ICRA举办的第39个年头。ICRA 是 IEEE 机器人和自动化学会的旗舰会议,也是机器人研究者展示和讨论他们工作的主要国际论坛。 在今年的ICRA上,亚马逊的三位首
AI科技评论
2022/05/27
2530
机器人落地「秘诀」:持续学习、知识迁移和自主参与
人工智能教授警告:陪伴机器人对老人很危险
Margaret Boden教授。图片来源:JAY WILLIAMS 一名人工智能教授发出这样的警告:老人家的机器人陪伴“在情感上很危险”,永远无法代替真实人类的陪伴。 在12月,新加坡大学推出了全球与真人最为相像的机器人“Nadine”,其开发者称,Nadine最终将提供儿童看护服务,并为孤独老人提供陪伴。市面上还有很多比Nadine更为基础的护理机器人,在一个计算机屏幕一样的脸上显示图像,只要3000英镑就能购得。 但是英国苏塞克斯大学的认知科学教授Maggie Boden警告说,机器永远无法理解抽
AI科技评论
2018/03/07
2.7K0
人工智能教授警告:陪伴机器人对老人很危险
这个蛋形家用娱乐机器人正是你想要的!
---- 毫无疑问,数码电子设备的世界是矩形的:电视、显示器、手机、平板、笔记本、系统界面,几乎一切都采用了矩形设计,毕竟从人类视觉构造及人体工程学角度来说,矩形的设备更容易使用。不过,这并不意味着所
机器人网
2018/04/19
6490
这个蛋形家用娱乐机器人正是你想要的!
不能管家的AI机器狗不是好宠物?
近日,波士顿动力的网红大黄狗Spot因为学会“做家务”而登上了微博热搜。继跨年夜的芭蕾小碎步之后,再次引起全网热议。
用户2908108
2021/03/03
4770
不能管家的AI机器狗不是好宠物?
微博出现大批AI机器人受害者
从网友早期的截图来看,罗伯特其实一出生就很“哇塞”:这种戳人肺管子的表现一开始就有。
量子位
2024/01/17
1470
微博出现大批AI机器人受害者
机器人学有哪些比较重要的研究领域?
机器人学有着极其广泛的研究和应用领域。这些领域体现出广泛的学科交叉, 涉及 众多的课题,如机器人体系结构、机构、控制、智能、传感、机器人装配、恶劣环境下的机器 · 人以及机器人语言等。机器人已在工业、农业、商业、旅游业、空间和海洋以及国防等领域 获得越来越普遍的应用。下面是一些比较重要的研究领域。 1 . 传感器与感知系统 · 各种新型传感器的开发, 包括视觉、触觉、听觉、接近感、力觉、临场感等 · 多传感系统与传感器融合 · 传感数据集成 · 主动视觉与高速运动视觉 · 传感器硬件模块化 · 恶劣工
机器人网
2018/04/19
1.7K0
机器人学有哪些比较重要的研究领域?
深度报道:小型装配机器人渐行渐近(下)
机器人正变得更便宜、更小、更精确且更易使用。可选空间也在扩大:六轴、SCARA、Delta机器人或者新型双臂机器人 – 各有自己的优势。它们能够看见、感受到、抓取并充满信心地装配小零件。无论是在狭小的空间或洁净室,大的场所或中小型企业,在3C市场、化妆品、能源、汽车或者生命科学领域,正越来越多地使用机器人装配小零件。 深度报道:小型装配机器人渐行渐近(上) 深度报道:小型装配机器人渐行渐近(中) 中小型企业的小零件装配 和生命科学行业一样,中小型企业开始认识到机器人自动化的竞争优势。对于许多这样的公司来说
机器人网
2018/04/20
6660
深度报道:小型装配机器人渐行渐近(下)
深度报道:小型装配机器人渐行渐近(上)
电子产品正在萎缩,产品更加定制化且生命周期越来越短。劳动力不足,用人成本上升。那么,制造商对此能做些什么呢? 快来看看柔性自动化。机器人正变得更便宜、更小、更精确且更易使用。可选空间也在扩大:六轴、S
机器人网
2018/04/20
6810
深度报道:小型装配机器人渐行渐近(上)
深度报道:小型装配机器人渐行渐近(中)
机器人正变得更便宜、更小、更精确且更易使用。可选空间也在扩大:六轴、SCARA、Delta机器人或者新型双臂机器人 – 各有自己的优势。它们能够看见、感受到、抓取并充满信心地装配小零件。无论是在狭小的空间或洁净室,大的场所或中小型企业,在3C市场、化妆品、能源、汽车或者生命科学领域,正越来越多地使用机器人装配小零件。(相关:深度报道:小型装配机器人渐行渐近(上)) 生命科学中的机器人装配 随着北美机器人市场在2015年的上半年创造了新记录,由自动化集成商们直接看到需求也是意料之中的。 “过去10年中,我们已
机器人网
2018/04/20
6430
深度报道:小型装配机器人渐行渐近(中)
机器人时代来临 索尼居然选择放弃
---- 要说机器人情结,应该属日本人最严重了。不管是《我的机器人女友》这类电影,还是现实中东芝的仿真美女机器人、软银公司“有感情的 Pepper “,他们不单只把机器人当作一种为人类提供帮助的工具,还想让机器人成为有感情的伴侣,作为家庭一份子。 既然有着这样的念头,日本人不仅在研发机器人上很拼,就连做机器宠物也要做得像模像样。 从1999年开始,索尼公司制造的机器狗 Aibo 就曾风靡一时,很多人都把他们当真正的宠物狗来看待。1999 年至 2006 年之间,索尼曾推出过好几代 Aibo 机器狗产品,
机器人网
2018/04/19
4480
机器人时代来临 索尼居然选择放弃
Neo Gamma 让家庭人形机器人走入千家万户成为现实
1X Technologies(前身为Halodi Robotics)成立于2014年,总部位于挪威奥斯陆,专注于开发具备人类运动能力的通用人形机器人。
AIGC新知
2025/02/25
3160
Neo Gamma 让家庭人形机器人走入千家万户成为现实
IROS 2021 | 没有图纸,机器人也会搭积木桥
作者 | 李云飞 编辑 | 陈大鑫 用积木拼搭各种建筑应该是很多小朋友童年的一大乐趣。现在,聪明的机器人也能自己玩积木了,而且不用人告诉它成品长什么样,机器人可以自己设计、建造一并完成。 AI 科技评论今天介绍一篇来自清华大学和字节跳动的研究者发表在 IROS 2021  的论文: “Learning to Design and Construct Bridge without Blueprint” 论文链接:https://arxiv.org/abs/2108.02439 1 介绍 这篇论文提出了机器
AI科技评论
2023/04/26
4020
IROS 2021 | 没有图纸,机器人也会搭积木桥
消费机器人走入家庭,这次有啥不一样?
消费型机器人(Consumer Robots)已经出现在我们的生活中——虽然比有些人预期的时间缓慢,但这样的情势即将发生改变。 机器人来了!这是我们早已知道的事了。主要用于装配线的工业机器人已经存在几
机器人网
2018/04/23
5290
消费机器人走入家庭,这次有啥不一样?
推荐 | 爱普生:小型工业机器人专家
---- 机器人成为时髦话题,中国自然是这场风暴的“风眼”。2014年,中国跃升为全球最大机器人市场。到2020年,中国机器人市场规模剑指千亿元。中国市场所迸发出的无限商机,让机器人企业的兴奋之情再无法按捺,一场机器人的饕餮盛宴正在开启。 拥有逾30年历史的爱普生机器人,自然不会错过这场千亿元“饕餮盛宴”。您没看错,除了飞入寻常百姓家的打印机,爱普生也生产工业机器人。同为“名门”之秀的爱普生SCARA四轴机器人已稳居全球SCARA市场霸主地位多年。 爱普生机器人2009年进入中国市场,恰逢3C产业和汽
机器人网
2018/04/19
7410
推荐 | 爱普生:小型工业机器人专家
机器人传感器简介
机器人传感器是一种检测装置,可以使得机器人感受到被测量信息,并且将加测感受到的信息按照一定规律转化为电信号或者其他形式的信息输出,以满足信息的传输、处理、存储等需求。机器人传感器是机器人的必要零部件,其可以将必要的外部信息以及自身状态信息传递给机器人的控制系统,从而为机器人的决策提供必要的条件。
ZC_Robot机器人技术
2021/02/17
3.5K0
机器人传感器简介
DeepMind的机器人技术
DeepMind以其在深度强化学习方面的工作而闻名,尤其是在掌握复杂游戏和预测蛋白质结构方面。
智药邦
2022/06/08
5280
DeepMind的机器人技术
斯坦福开源的家用机器人!Transformer 架构驱动,由华人开发!
近日,斯坦福大学、伯克利大学和谷歌 DeepMind 团队合作推出一款家用机器人,名为"Mobile ALOHA"。
大数据文摘
2024/01/07
8180
斯坦福开源的家用机器人!Transformer 架构驱动,由华人开发!
今天,如何构建更安全的工业机器人?
据彭博社报道,今年6月,德国大众汽车一个加工车间,一位年仅22岁的维修工人因机器人出现故障而被“意外杀死”。此事件使得各大媒体纷纷开始讨论人类与 未来机器人“和平共处”的安全可靠性。那么,在今天这个不断智能化、自动化的世界里,我们怎样才能保证机器人可以安全地站立于人类身旁,在共享有限空间的前提下协同工作呢? 安全而高效的人类交互机器人——或称为“协作机器人”(cobotics),将会对组装生产线、家务劳动服务、健康保险领域以及物流产业产生革新作用。 汽车制造商和航空航天设备生产商都已经大规模引用自动化的机器
机器人网
2018/04/20
5980
今天,如何构建更安全的工业机器人?
小鱼在家CEO宋晨枫:做品类的开创者,用智能陪伴机器人突破中国家庭市场|科技云·专访
这是小鱼在家推出的第三代产品,围绕家庭打造,集合陪伴、视频通话、娱乐以及管家、监控于一体的智能设备。
科技云报道
2022/04/14
1.2K0
小鱼在家CEO宋晨枫:做品类的开创者,用智能陪伴机器人突破中国家庭市场|科技云·专访
推荐阅读
相关推荐
虚拟宠物,虚拟人和虚拟永生
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验