2023-12-25 19:55:59 | 我爱编程网
Python 中执行 Shell 命令有多种方法,stackoverflow 上有对这些方法进行比较的讨论,Calling an external command in Python 指出使用subprocess模块来实现更优。因此,本文说明如何使用subprocess模块来实现 Shell 脚本的功能。
subprocess模块提供多种方法来实现执行 Linux 的命令,例如subprocess.call()方法,subprocess.check_call()方法,等。这些方法都是对Popen类的封装,故本文着重讲述Popen类的使用。
执行 Shell 命令
可以通过向Popen()传递需要执行的命令来创建一个Popen对象,这样,便会创建一个子进程来执行命令。例如:
child = subprocess.Popen(["ping","-c","5","leehao.me"])
1
上面的代码会创建一个子进程来执行ping -c 5 leehao.me命令,这个命令采用列表的形式传递给Popen()方法。如果我们想直接采用ping -c 5 leehao.me字符串形式,可以添加shell=True来实现:
child = subprocess.Popen("ping -c 5 leehao.me", shell=True)
1
官方文档指出由于安全原因故不建议使用shell=True,详细说明可以参考官方文档的描述。
等待子进程执行
子进程执行命令后,主进程并不会等待子进程执行。为了让主进程等待子进程执行结束,需要显示调用Popen.wait()方法。例如:
child = subprocess.Popen(["ping","-c","5","leehao.me"])
child.wait()
print 'parent finish'
1
2
3
这样,主进程会等待子进程执行ping命令完毕后,才会打印出parent finish的输出。
获取执行结果
为了获取Popen()子进程的输出,可以使用Popen.communicate()方法,例如:
def subprocess_cmd(command):
process = subprocess.Popen(command,stdout=subprocess.PIPE, shell=True)
proc_stdout = process.communicate()[0].strip()
print proc_stdout
subprocess_cmd('echo leehao.me; echo
www.leehao.me
')
1
2
3
4
5
6
输出:
leehao.me
www.leehao.me
process.communicate()方法可以实现主进程与子进程的通信。主进程可以通过它向子进程发送数据,也可以读取子进程的输出的数据。上面的例子中,我们在创建Popen对象时指定stdout=subprocess.PIPE,这样主进程便可以读取子进程的输出。
communicate()方法返回一个元组:(stdoutdata, stderrdata),process.communicate()[0]即获取子进程的标准输出。
需要指出的是,调用communicate()方法后,主进程也会等待子进程执行完毕。
上面的例子中,子进程向标准输出打印两个字符串,主进程接收到了这些输出,并打印出来。
powershell运行代码的话,只是一行一行的执行,建议使用以下几种:
dos命令,方法是Python 文件全路径名:
当然也可以右键,选择Edit With IDLE,然后直接按F5运行;
或者双击。
我爱编程网(https://www.52biancheng.com)小编还为大家带来如何用python shell运行.py文件?的相关内容。
在Python shell界面,输入.py文件,单击“run”来执行代码,再回到shell界面,输入代码,就可以运行.py文件了。
具体步骤:
打开Python shell界面。
2.编写一个.py文件,将文件名保存成“TempConvert”。
3.单击“run”-“run module”来执行代码。
4.回到shell界面中,输入一下代码,基本格式是:import 脚本文件名。我爱编程网
5.这样就可以运行代码了。
python怎么使用qtdesigner设计的ui软硬件环境OSXEICapitanPython3.5.1PyQt5.5.1PyCharm5.0.1前言在PyQt5系列教程的第一篇h50218157,我们已经搭建好了开发环境,今天,我们就用Python开发第一个QtGUI程序,让大家感受下Qt开发的魅力,熟悉下Qt开发GUI程序的一般流
anaconda怎么用Python代码(Anaconda的使用方法)Anaconda安装成功后,python也默认安装完成。Anaconda启动成功后,默认的环境为base环境,对于初学者来说不太好理解。base环境就好像我们操作系统的C盘的“桌面”一样,中文件不能都放在桌面上,要在除C盘以外的分驱上建立文件夹来管理计算机中的文件。也可以理解为windows系统中的用户,管理员可以建立
如何修改Pythonshell界面的字体类型我们在采用Pythonshell对Python的编程的时候,往往默认的字体不能够满足我们对需求,或是字体不好看,其实Python的字体是可以配置的,具体的配置方法小编将会给出。打开自己的IDLE,如图所示,这是我们已经打开过的界面,这应也可以更好的显示我们的修改效果。在菜单栏中单击“Options”,在下拉菜单中选中“configurei
菜鸟求助:PHP中调用系统命令为何有些命令总是失败PHP执行系统命令(简介及方法)在PHP中调用外部命令,可以用如下三种方法来实现:方法一:用PHP提供的专门函数(四个):PHP提供4个专门的执行外部命令的函数:exec(),system(),passthru(),shell_exec()1)exec()原型:stringexec(string$command[,arra
round函数怎么使用1、数据库中的round()Round函数返回一个数值,该数值是按照指定的小数位数进行四舍五入运算的结果。除数值外,也可对日期进行舍入运算。2、Excel中的round()round函数是EXCEL中的一个基本函数,作用按指定的位数对数值进行四舍五入,语法是ROUND(number,num_digits)。3、PHP中的round()
php中怎么使用call__call 是 php 语言里的一个魔术方法,其作用是:当调用的方法不存在时会自动调用这个方法。语法:function __call(string $function_name, array $arguments){......}该方法有两个参数,第一个参数 $function_name 会自动接收不存在的方法名,第二个 $ar
python生成1到100随机数加入列表不能重复使用Python内置的random模块可以实现,代码如下:python代码fromrandomimportsample#定义需要的随机数数量numbers=10result=sample(range(1,101),k=numbers)print(result)输出:[55,56
如何在pythonIDLEShell窗口中编写程序计算圆的周长?可以按照以下步骤在PythonIDLEShell窗口中编写计算圆周长的程序:打开PythonIDLEShell窗口。在窗口中输入以下代码:pythonCopycoderadius=float(input("请输入圆的半径:"))circumference=2*3.14159*radiuspr
2025-02-01 20:24:39
2024-01-05 14:11:24
2025-02-12 03:21:37
2025-02-10 15:19:48
2025-01-28 17:58:32
2024-11-22 05:08:01