一文看懂python如何执行cmd命令

news/2024/11/8 14:41:13/

6afdd66663e44ecfb1abba37025ddc79.jpg

 

概要

 

 在进行Python编程时,经常需要使用到操作系统的命令行,这就要求我们学会如何使用Python执行cmd命令。


 

Python执行cmd命令的几种方法

 

Python是一种强大而灵活的编程语言,它可以很方便地执行系统命令,与操作系统进行交互。本文将介绍Python执行cmd命令的几种常用方法,以及它们的优缺点和使用场景。

 

1. 使用os模块的os.system()函数

 

os模块是Python标准库中的一个模块,它提供了一些与操作系统相关的函数和变量。其中,os.system()函数可以将字符串转化成命令在服务器上运行,返回值是命令的退出状态码,0表示成功,1表示失败,256表示没有返回结果。例如:

import os
a = os.system("ping 192.168.1.101") # 使用a接收返回值
print(a)

这种方法的优点是简单易用,不需要额外的模块导入。缺点是无法获取命令的输出内容,只能获取返回值;而且每次执行命令都会创建一个新的子进程,在资源消耗上比较大。

 

2. 使用os模块的os.popen()函数

 

os.popen()函数也是os模块中的一个函数,它可以通过管道的方式来执行系统命令,返回值是一个文件对象,可以读或者写。如果需要读取输出内容,可以调用read()或readlines()方法。例如:

import os
a = os.popen("ipconfig") # 使用a接收返回值
print(a.read()) # 读取输出内容

这种方法的优点是可以获取命令的输出内容,并对其进行处理;缺点是无法获取命令的返回值,而且也会创建新的子进程。

 

3. 使用subprocess模块

 

subprocess模块是Python从2.4版本开始引入的模块,主要用来取代一些旧的模块方法,如os.system、os.spawn、os.popen、commands.*等。官方推荐使用该模块执行系统命令,subprocess模块通过子进程来执行外部指令,并通过input/output/error管道,获取子进程的执行结果。常用的函数有subprocess.Popen()、subprocess.call()、subprocess.run()等。

 

3.1 使用subprocess.Popen()

 

使用Popen可以创建进程,并与进程进行复杂的交互。它接受一个命令或者一个命令列表作为参数,并返回一个Popen对象。通过调用Popen对象的communicate()方法可以获取输出和错误信息。例如:

import subprocess
# 使用Popen创建进程,并与进程进行复杂的交互
proc = subprocess.Popen('ipconfig', # cmd特定的查询空间的命令stdin=None, # 标准输入 键盘stdout=subprocess.PIPE, # -1 标准输出(演示器、终端) 保存到管道中以便进行操作stderr=subprocess.PIPE, # 标准错误,保存到管道shell=True)
outinfo, errinfo = proc.communicate() # 获取输出和错误信息
print(outinfo.decode('gbk')) # 外部程序 (windows系统)决定编码格式
print(errinfo.decode('gbk'))

这种方法的优点是可以灵活地控制输入和输出,并与子进程进行交互;缺点是参数比较复杂,而且需要注意编码格式。

 

3.2 使用subprocess.call()

 

使用call执行指定的命令,返回命令执行状态,功能类似os.system()函数,参数shell默认为False。例如:

import subprocess
# 使用call执行指定的命令,返回命令执行状态
subprocess.call(['df', '-h']) # 数组作为参数运行命令

这种方法的优点是可以获取命令的返回值,并且不需要指定shell参数;缺点是无法获取命令的输出内容。

 

3.3 使用subprocess.run()

 

subprocess.run()是Python3.5中新增的函数,执行指定的命令,返回一个包含执行结果的CompletedProcess类的实例。通过访问CompletedProcess类的属性和方法可以获取更多信息。例如:

import subprocess
# 使用run执行指定的命令,返回一个包含执行结果的CompletedProcess类的实例
result = subprocess.run(['ls', '-l'])
print(result.returncode) # 返回码
print(result.stdout) # 标准输出
print(result.stderr) # 标准错误

这种方法的优点是可以获取更多信息,并且简化了Popen类的使用;缺点是只适用于Python3.5及以上版本。

 

4. 使用cmd模块

 

cmd模块提供了一个简单框架用于编写面向行的命令解释器。可以通过继承Cmd类并实现do_*()方法来自定义解释器类,并且封装动作方法。例如:

import cmdclass MyShell(cmd.Cmd):intro = 'Welcome to my shell. Type help or ? to list commands.\n'prompt = '(myshell) 'file = Nonedef do_greet(self, arg):'Greet the person'print(f'Hello {arg}!')def do_exit(self, arg):'Exit the shell'print('Bye')return Trueif __name__ == '__main__':MyShell().cmdloop()

这种方法的优点是可以自定义自己的解释器,并提供帮助信息和自动补全功能;缺点是需要编写更多代码,并且不适合复杂或者交互式的命令。

总体来说:

  • 如果只需要简单地执行一条无需输出内容或者交互式输入参数等功能时,则可使用os.system()函数。

  • 如果需要获取输出内容,则可使用os.popen()函数或者subprocess.Popen()类。

  • 如果需要获取返回值,则可使用os.system()函数或者subprocess.call()函数。

  • 如果需要与子进程进行复杂交互,则可使用subprocess.Popen()类。

  • 如果需要自定义自己的解释器,则可使用cmd模块。

以上就是这次介绍的几种常用操作cmd命令的方法,你学会了嘛?

 

如果对你有帮助,欢迎转发点赞收藏,感谢🙏

 


http://www.ppmy.cn/news/331888.html

相关文章

256MB

256 MB 256 * 1024 * 8 kB 256 * 1024 * 1024 * 8 b 2147483648 b; int 4 字节 4 B 32 b; long long int 8 字节 8 B 64 b; 256 MB / 32 b 67108864 (int); 256 MB / 64b 33554432 (long long int) ; 一般来说申请数组 int nums[67108864] 就为最大了&#xff1b…

张国荣 - 当爱已成往事

往事不要再提 人生已多风雨纵然记忆抹不去 爱与恨都还在心里 真的要断了过去 让明天好好继续你就不要再苦苦追我的消息 爱情它是个难题 让人目弦神迷忘了痛或许可以 忘了你却太不容易 你不曾真的离去 你始终在我心里我对你仍有爱意 我对自己无能为力 因为我仍有梦 依然将你…

张国荣 这么完美的人,一定是同性恋吧

张国荣永远被大家宠爱着,他大概代表了同性恋明星的最高成就。自杀之后更是封神,女人视他为偶像,弯男把他当信仰,连直男也纷纷把他换成qq头像。每年四月一号都是“全民缅怀哥哥日”。 事实上,他却没有真正出柜过&#x…

张国荣5周年祭辰 张学友梁朝伟等红馆唱悼哥哥

梁朝伟 张学友 晨报综合消息 今年是张国荣 去世五周年,除了歌迷一如既往地举办各种追思活动外,他生前的经纪人兼好友陈淑芬也将有所行动,近日陈淑芬透露她将号召一群张国荣生前的好友于四月一日当天在红馆举行纪念演唱会。 目前 张学友、莫文…

多少人败给了一个字:等 ! 宋丹丹、梁静茹、张国荣。。。

(一) 张国荣对梅艳芳说过,等我们到40岁,你未嫁,我未娶,我们就在一起。 可是后来,他在03年4月1日坠楼殒身,她在同年12月30日肺功能衰竭病逝。 那年,她刚好40岁。 &#x…

张国荣

张国荣死了有好长时间了吧。 今天在清理房间的时候,在一个音乐盒里边放他的歌。平时是不听音乐的,现在的好歌曲太少了。之前的老东西们的歌也听得有点疲劳了。 只记得是4月1日愚人节那天,哪一年却忘了。可能是04年吧。他一直不会飞&#xff0…

张国荣《热·情》演唱会再现荧幕:AI修复解锁的经典与视听生活

每年的4月1日,都会有千万人自发地去追思张国荣。或重温影视片段,或听经典曲目,在哥哥生前倾注的心血中持续不断获得动力与力量。 熟悉张国荣的粉丝,可能都了解哥哥生前最后的一场演唱会——《热情》。这场演唱会由其亲自担任艺术总…

揭秘:张国荣葬礼,袁咏仪为何哭到失控?

张国荣2003年4月1日在香港去世,终年46岁。张国荣去世的消息一经爆出,震动了整个华人界,死因至今还是一个谜语。追悼会上,张国荣生前的众多好友谢霆洪金宝等都来了。最令人咂舌的是袁咏仪在张智霖身后哭到失控,没有办法…