百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python-调用系统命令的方法(python 调用)

off999 2024-10-17 11:49 48 浏览 0 评论

前言

在Python里面,直接调用系统命令,可以快速的完成任务。一般使用os或者subprocess模块,来执行系统命令。


os.system()

该函数返回命令执行结果的返回值,system()函数在执行过程中进行了以下三步操作:

1、fork一个子进程;

2、在子进程中调用exec函数去执行命令;

3、在父进程中调用wait(阻塞)去等待子进程结束。

返回0表示命令执行成功,其他表示失败。

注意:使用该函数经常会莫名其妙地出现错误,但是直接执行命令并没有问题,所以一般建议不要使用。

用法:os.system("command")


os.popen()

这种调用方式是通过管道的方式来实现,函数返回是 file read 的对象,对其进行读取read、readlines等操作可以看到执行的输出。

注意:如果命令执行失败,就读取不到内容。

用法:os.popen("command")


subprocess.Popen()

subprocess模块被推荐用来替换一些老的模块和函数,如:os.system、os.spawn*、os.popen*等

subprocess模块目的是fork一个新的进程并与之通信,最常用是定义类Popen,使用Popen可以创建进程,并与进程进行复杂的交互。其函数原型为:

class 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:这个参数必须是字符串或者是一个由字符串成员的列表。其中如果是一个字符串列表的话,那第一个成员为要运行的程序的路径以及程序名称;从第二个成员开始到最后一个成员为运行这个程序需要输入的参数。

executable:指定要运行的程序,这个一般很少用到,因为要指定运行的程序在args中已经指定了。stdin,stdout ,stderr:分别代表程序的标准输入、标准输出、标准错误处理。可以选择的值有PIPE,已经存在的打开的文件对象和NONE。若stdout是文件对象的话,要确保文件对象是处于打开状态。

shell:默认是False。shell参数根据要执行的命令情况来定,如果将参数shell设为True,executable将指定程序使用的shell。在windows平台下,默认的shell由COMSPEC环境变量来指定。

bufsize:指定缓冲。0 无缓冲,1 行缓冲,其他 缓冲区大小,负值 系统缓冲

cwd:用于设置子进程的当前目录

stdin, stdout, stderr:分别表示程序的标准输入、标准输出、标准错误输出,可以是 subprocess.PIPE 或 其他程序、文件。

env:用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。

universal_newlines:不同系统的换行符不同,True 即使用 \n

preexec_fn:只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用。

用法: child = subprocess.Popen(["cmd","arg1"...])

subprocess.Popen类的实例可调用的方法

Popen.poll()用于检查子进程(命令)是否已经执行结束,没结束返回None,结束后返回状态码。

Popen.wait(timeout=None)等待子进程结束,并返回状态码;如果在timeout指定的秒数之后进程还没有结束,将会抛出一个TimeoutExpired异常。

Popen.communicate(input=None, timeout=None)该方法可用来与进程进行交互,比如发送数据到stdin,从stdout和stderr读取数据,直到到达文件末尾。

Popen.send_signal(signal)发送指定的信号给这个子进程。

Popen.terminate()停止该子进程。

Popen.kill()杀死该子进程。


其他函数

subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, shell=False, timeout=None, check=False, universal_newlines=False)

subprocess.run()Python 3.5中新增的函数。执行指定的命令,等待命令执行完成后返回一个包含执行结果的CompletedProcess类的实例。

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

subprocess.call()执行指定的命令,返回命令执行状态,其功能类似于os.system(cmd)。

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

subprocess.check_call()Python 2.5中新增的函数。 执行指定的命令,如果执行成功则返回状态码,否则抛出异常。其功能等价于subprocess.run(..., check=True)。

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

subprocess.check_output()Python 2.7中新增的的函数。执行指定的命令,如果执行状态码为0则返回命令执行结果,否则抛出异常。

subprocess.getstatusoutput(cmd)

subprocess.getstatusoutput(cmd)执行cmd命令,返回一个元组(命令执行状态, 命令执行结果输出),其功能类似于commands.getstatusoutput()。

subprocess.getoutput(cmd)

subprocess.getoutput(cmd)接收字符串格式的命令,执行命令并返回执行结果,其功能类似于os.popen(cmd).read()和commands.getoutput(cmd)。


总结

subprocess是用来替代os.system等函数的,当subprocess.call()、subprocess.check_call()、subprocess.check_output()和subprocess.run()这些高级函数无法满足需求时,我们可以使用subprocess.Popen类来实现我们需要的复杂功能。

相关推荐

qq空间相册密码怎么破
  • qq空间相册密码怎么破
  • qq空间相册密码怎么破
  • qq空间相册密码怎么破
  • qq空间相册密码怎么破
互盾手机数据恢复软件下载(互盾数据恢复软件可以免费使用一次吗)

要的。手机如果可以连电脑当做u盘识别就可以用恢复软件。比如用安易。至于能不能出现盘符,可以网上查一下你这个手机型号可不可以,或者问问手机售后。1、安装互盾安卓恢复大师,运行软件后,将手机连接到电脑上...

电脑wifi突然变成红叉搜不到

1、WiFi功能未开启:很多时候出现WiFi红色叉叉图标,可能就是无线WiFi的开关或者按键没有开启导致的。一般的笔记本键盘上面都有一个F5开启WiFi的功能,有的需要结合Fn功能键一起按。每个品牌的...

正版win10系统一键重装官网(一键装机win10正版系统)

1、下载小白一键重装软件,打开软件后选择我们要安装的系统。?2、接着小白给出我们一些常用的电脑软件,大家可根据自己需要进行下载。?3、然后就是我们就耐心的等待系统镜像的下载吧。?4、部署环境完成后我们...

windows8系统自己怎么装(如何安装windows 8)

要在线安装Windows8系统,您可以按照以下步骤操作:1.准备安装媒体:在您的计算机上打开一个现代的网络浏览器(如Chrome、Firefox或Edge),然后前往Microsoft...

win10登录选项没有密码设置(win10没有登陆密码框)

是该电脑没设置密码,所以登录时看不到密码选项。电脑开机后,要设置密码,设置完成后,重新启动电脑,就会出现密码登录框,输入密码并正确后,电脑才能正常进入系统。1、首先进入安全模式;进入安全模式教程:2、...

小白刷机官网(小白刷机助手)

平板的话,和处理器有关,如果处理器只支持win8是不能刷win10的。

windows关闭端口命令(windows 关端口)

1、点击控制面板。2、进入控制面板,然后点击系统和安全。3、进入系统和安全,点击Windows防火墙。4、进入Windows防火墙,点击左侧的高级设置。5、进入防火墙高级设置,点击入站规则。6、点击入...

360免费wifi老版本(360免费wifi2019下载安装)
  • 360免费wifi老版本(360免费wifi2019下载安装)
  • 360免费wifi老版本(360免费wifi2019下载安装)
  • 360免费wifi老版本(360免费wifi2019下载安装)
  • 360免费wifi老版本(360免费wifi2019下载安装)
无线wifi路由器怎么安装(请问无线路由器怎么安装)

安装的方法/步骤:1、怎么安装无线路由器呢?首先把网线的其中一头插入进光猫里面。2、接着用网线的另一头插入进无线路由器的蓝色接口处,这样就安装好无线路由器啦。3、点击打开电脑浏览器,输入路由器设置地址...

fat32格式化精灵(格式化fat32格式工具)

内存卡格式化一般有两种方式:第一种是直接将内存卡插入手机的卡托,然后进入设置——运行及内存管理,点击格式化SD卡即可完成。当然有一些手机是不支持外置的内存卡插入,这就需要用OTG线插入手机,点击手机的...

外置光驱安装win7系统(外置光驱安装操作系统)

苹果电脑、电源适配器丶光盘装系统(电脑有光驱、或者外接光驱)光盘安装准备:win764位纯净版安装盘,如果使用的苹果电脑有光驱,优先使用自带光驱安装;如电脑没有光驱,可以是用外接USB光驱安装。光盘...

win7x86是32位还是64位

32位win7x86是32位操作系统,win7x64是64位操作系统。扩展资料Windows7,中文名称视窗7,是由微软公司(Microsoft)开发的操作系统,内核版本号为WindowsNT...

用我告诉你安装win7(安装win7教程)

方法一:使用工具在线一键下载安装win7(win7正式版只需使用正版密钥激活即可)1、在电脑安装好小白一键重装系统工具打开,选择原版win7旗舰版系统,点击安装此系统。2、等待软件自动下载系统镜像文件...

sd卡如何修复(如何修复sd卡视频教程)

修复SD卡的三个步骤如下:1.使用磁盘检测工具检查SD卡的错误:您可以使用Windows操作系统中自带的磁盘检查工具或第三方软件来检查并修复SD卡中的错误。2.格式化SD卡:如果检查后发现错误无法...

取消回复欢迎 发表评论: