当前位置:首页 > 数码 > Python-subprocess模块详解 (python怎样打开)

Python-subprocess模块详解 (python怎样打开)

admin8个月前 (05-04)数码26

/target=_blankclass=infotextkey>Python的subprocess模块是一个十分弱小的工具,用于启动和与外部进程启动交互。它准许口头外部命令、访问系统Shell、管道数据、捕捉输入和失误消息,以及更多。

本文具体引见subprocess模块的各个方面,包括如何口头外部命令、传递参数、处置输入输入、失误处置以及一些初级运行。

1.引见

subprocess模块是Python的规范库中的一局部,它准许与外部进程启动交互。这关于口头系统命令、调用其余可口头文件、处置数据流以及与其余进程通讯十分有用。无论是须要口头便捷的命令还是须要与复杂的外部程序启动交互,subprocess都可以胜任。

在接上去的内容中,咱们将学习如何经常使用subprocess模块来口头外部命令、处置输入输入、捕捉失误消息,并讨论一些初级用法。咱们还会讨论一些安保性方面的留意事项,以确保您的程序不遭到潜在的安保破绽的要挟。

2.口头外部命令

2.1经常使用subprocess.run()

subprocess.run()是Python3.5及更高版本引入的函数,用于运转外部命令并期待其成功。

以下是一个便捷的示例,展示如何经常使用subprocess.run()来口头ls命令并失掉其输入:

importsubprocessresult=subprocess.run(["ls","-l"],stdout=subprocess.PIPE,text=True)print(result.stdout)

在下面的示例中,subprocess.run()接受一个蕴含命令及其参数的列表,经过stdout=subprocess.PIPE参数捕捉规范输入,并经常使用text=True参数指定输入为文本。最后,咱们打印了result.stdout以失掉ls-l命令的输入。

2.2经常使用subprocess.Popen()

subprocess.Popen()提供了更多的灵敏性,准许与进程启动交互,而不只仅是期待它成功。

以下是一个经常使用subprocess.Popen()的示例,展示如何口头外部命令并失掉其输入:

importsubprocess#口头命令process=subprocess.Popen(["ls","-l"],stdout=subprocess.PIPE,stderr=subprocess.PIPE,text=True)#读取规范输入和失误out,err=process.communicate()print("规范输入:")print(out)print("规范失误:")print(err)

在下面的示例中,首先经常使用subprocess.Popen()来启动进程,并指定stdout=subprocess.PIPE和stderr=subprocess.PIPE以捕捉规范输入和规范失误。而后,经常使用process.communicate()方法来期待进程成功并失掉其输入。

2.3指定口头门路

经常使用cwd参数来指定口头外部命令的上班目录。例如,要在特定目录中口头命令,可以这样做:

importsubprocessresult=subprocess.run(["ls","-l"],stdout=subprocess.PIPE,text=True,)print(result.stdout)

这将在/path/to/directory目录中口头ls-l命令。

2.4传递参数

假设命令须要接受参数,可以将它们作为列表的一局部传递给subprocess.run()或subprocess.Popen()。

例如,要将文件名作为参数传递给命令,可以这样做:

importsubprocessfilename="example.txt"result=subprocess.run(["cat",filename],stdout=subprocess.PIPE,text=True)print(result.stdout)

这将口头catexample.txt命令,其中filename是文件名。

3.处置输入输入

3.1规范输入

subprocess模块还可以将数据传递给外部命令的规范输入。要成功这一点,可以经常使用stdin参数,并将其设置为一个文件对象或一个字节串。

importsubprocessinput_data="Hello,subprocess!"result=subprocess.run(["grep","subprocess"],input=input_data,stdout=subprocess.PIPE,text=True)print(result.stdout)

在下面的示例中,经常使用input_data将数据传递给grep命令的规范输入,并搜查蕴含"subprocess"的行。

3.2规范输入

前面的示例中,曾经看到如何捕捉外部命令的规范输入。经过经常使用stdout参数,可以将规范输入重定向到文件、字节串或文件对象。

importsubprocessoutput_file=open("output.txt","w")result=subprocess.run(["ls","-l"],stdout=output_file,text=True)output_file.close()

在下面的示例中,咱们将ls-l命令的规范输入重定向到一个名为output.txt的文件。

3.3规范失误

与规范输入相似,subprocess还可以捕捉规范失误消息。要捕捉规范失误,请经常使用stderr参数。

importsubprocessresult=subprocess.run(["ls","/nonexistent"],stdout=subprocess.PIPE,stderr=subprocess.PIPE,text=True)print("规范输入:")print(result.stdout)print("规范失误:")print(result.stderr)

在下面的示例中,口头ls/nonexistent命令,该命令会发生一个失误,并将规范输入和规范失误消息捕捉到result.stdout和result.stderr中。

4.失误处置

口头外部命令时,通常须要处置失误。以下是一些处置失误的罕用方法:

4.1审核前往码

subprocess.run()和subprocess.Popen()前往一个CompletedProcess或Popen对象,其中蕴含无关命令口头的消息,包括前往码。前往码为0示意命令成功口头,非零前往码示意出现失误。

importsubprocessresult=subprocess.run(["ls","/nonexistent"],stdout=subprocess.PIPE,stderr=subprocess.PIPE,text=True)ifresult.returncode!=0:print("命令口头失败。")print("规范失误:")print(result.stderr)

在下面的示例中,审核result.returncode能否为0,假设不是,就示意命令口头失败。

4.2捕捉失误输入

subprocess模块详解

有时,失误消息或者不只仅蕴含在前往码中,还蕴含在规范失误输入中。可以捕捉规范失误输入并审核其中的消息。

importsubprocessresult=subprocess.run(["ls","/nonexistent"],stdout=subprocess.PIPE,stderr=subprocess.PIPE,text=True)ifresult.returncode!=0:print("命令口头失败。")print("失误消息:")print(result.stderr)

在下面的示例中,咱们捕捉规范失误输入,并在出现失误时打印它。

5.管道和重定向

subprocess还可以创立管道,将一个命令的输入衔接到另一个命令的输入。这在处置复杂的数据处置义务时十分有用。

例如,要将一个命令的输入传递给另一个命令,可以这样做:

importsubprocess#创立第一个命令的进程process1=subprocess.Popen(["ls","/path/to/directory"],stdout=subprocess.PIPE,text=True)#创立第二个命令的进程,将第一个命令的输入衔接到它的输入process2=subprocess.Popen(["grep","search_term"],stdin=process1.stdout,stdout=subprocess.PIPE,text=True)#从第二个命令的规范输入中读取结果result=process2.communicate()[0]print(result)

在下面的示例中,首先创立第一个命令的进程,而后创立第二个命令的进程,并将第一个命令的输入衔接到第二个命令的输入。

6.初级运行

6.1同时读写规范输入输入

subprocess模块同时读取和写入规范输入和输入。这关于与外部进程启动双向通讯十分有用。

以下是一个示例,展示如何经常使用subprocess启动双向通讯:

importsubprocess#创立命令进程process=subprocess.Popen(["python","-u"],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE,text=True,universal_newlines=True)#写入数据到规范输入process.stdin.write("print('Hellofromchildprocess')n")process.stdin.flush()#读取并打印规范输入output,errors=process.communicate()print("规范输入:")print(output)#打印规范失误print("规范失误:")print(errors)

在下面的示例中,创立了一个子进程,而后向其规范输入写入Python代码,并捕捉其规范输入和规范失误。

6.2超时处置

subprocess还准许您设置口头命令的超时期间,以防止命令运转期间过长。要成功这一点,您可以经常使用timeout参数。

例如:

importsubprocesstry:result=subprocess.run(["sleep","10"],timeout=5,stdout=subprocess.PIPE,text=True)print(result.stdout)exceptsubprocess.TimeoutExpired:print("命令口头超时。")

在下面的示例中,试图运转sleep10命令,但因为设置了5秒的超时期间,当命令运转期间超越5秒时,将引发subprocess.TimeoutExpired意外。

6.3经常使用Shell命令

自动状况下,subprocess不会经常使用Shell来口头命令。这是出于安保思考,以防止潜在的Shell注入攻打。但有些状况下,或者须要经常使用Shell来口头命令,可以将shell参数设置为True。

importsubprocess#经常使用Shell口头命令result=subprocess.run("ls-l|grep.txt",shell=True,stdout=subprocess.PIPE,text=True)print(result.stdout)

在下面的示例中,咱们经常使用Shell来口头ls-l|grep.txt命令。

7.安保性留意事项

在口头外部命令时,请务必小心处置输入,以防止潜在的安保破绽。防止将不受信赖的数据传递给subprocess,免得遭到命令注入攻打。

确保了解正在口头的命令及其参数,以防止潜在的危险。

总结

Python的subprocess模块提供了弱小的工具,准许与外部进程启动交互。可以经常使用它口头外部命令、传递参数、处置输入输入和失误消息,以及支持管道和重定向。这为编写须要与外部程序启动通讯的Python运行程序提供了关键的性能。

subprocess模块是Python中处置外部进程交互的关键工具,但在经常使用时须要留意安保性疑问,特意是在处置不受信赖的输入时。熟练把握这一模块,将有助于编写更弱小和安保的Python运行程序,能够与外部程序启动有效通讯。


python有哪些模块 Python常用模块大全?

Python有很多常用的模块,以下是一些常用模块的大致分类:1. 常用模块: - math:数学运算模块 - random:随机数生成模块 - datetime:日期和时间处理模块 - os:操作系统接口模块 - io:输入输出模块 - sys:系统相关模块 - json:JSON编码和解码模块- re:正则表达式模块- time:时间模块 - subprocess:子进程管理模块 2. 数据分析和科学计算模块: - numpy:数值计算模块- pandas:数据分析模块 - matplotlib:数据可视化模块 - scipy:科学计算模块 - scikit-learn:机器学习模块 3. 网络和Web开发相关模块: - requests:网络请求模块 - urllib:URL处理模块 - socket:网络通信模块- flask:轻量级Web开发框架- django:全功能Web开发框架 4. 数据库相关模块: - sqlite3:SQLite数据库模块 - MySQLdb:MySQL数据库模块 - psycopg2:PostgreSQL数据库模块 - pymongo:MongoDB数据库模块5. GUI开发模块:- tkinter:Python自带的图形界面模块 - PyQt:跨平台的图形界面模块 - wxPython:基于wxWidgets的图形界面模块

python中,通过命令行方式执行命令,如何才能得到返回的错误信息?

刚查了Python的文档说,要用更强大的命令行工具,最好使用subprocess。所以也许你应该好好看看subprocess模块:。这里面有很多函数,包括popen,当然是subprocess下面的。

另外,这里有个和你类似的问题:,你可以去看下,摘抄其使用subprocess的程序如下:

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: Python

“Python-subprocess模块详解 (python怎样打开)” 的相关文章

Python中的LEGB规则 (python怎样打开)

Python中的LEGB规则 (python怎样打开)

Python 中的 LEGB 规则决定了变量和函数的作用域解析顺序。它代表了四个作用域层级: 局部作用域 闭包函数外的函数 全局作用域 内置作用域...

处置日常义务的终极工具!-Python-文件读写实战 (处置行为是什么意思)

处置日常义务的终极工具!-Python-文件读写实战 (处置行为是什么意思)

/target=_blankclass=infotextkey>Python文件的读写操作时,有很多须要思考的细节,这包含文件关上形式、读取和写入数据的方法、意外处置等。 在本文中,...

Python中的Random模块-摸索随机性的神奇环球 (python编程)

Python中的Random模块-摸索随机性的神奇环球 (python编程)

随机性在计算机编程和数据迷信中表演着至关关键的角色。/target=_blankclass=infotextkey>Python中的random模块提供了丰盛的工具和函数,协助咱们生成随机数...

惰性求值和lambda表达式的强大组合-Python高级技巧 (惰性求值和逻辑短路)

惰性求值和lambda表达式的强大组合-Python高级技巧 (惰性求值和逻辑短路)

Lambda 表达式 在 Python 中,Lambda 表达式是一个匿名函数,它可以在需要函数对象的地方使用。Lambda 表达式的语法如下: lambda arguments: exp...

一份收藏者必备清单-100个精选Python库 (收藏者的心态)

一份收藏者必备清单-100个精选Python库 (收藏者的心态)

/target=_blankclass=infotextkey>Python为啥这么火,这么多人学,就是由于繁难好学,性能弱小,整个社区十分生动,资料很多。而且这言语触及了方方面面,比如智能...

掌握网络世界的无限可能-Python分布式爬虫助力搜索引擎打造 (掌握网络世界的好处)

掌握网络世界的无限可能-Python分布式爬虫助力搜索引擎打造 (掌握网络世界的好处)

主从模式 主从模式是一种简单的分布式爬虫架构,其中一台主机作为控制节点,负责管理所有运行爬虫的从机。 主节点负责向从机分配任务,并接收新生成的任务。从机只需要从主节点接收任务,并把新生...

五分钟内完成个性化-GUI-计算器搭建-Python (五分钟内完成的动物实验)

五分钟内完成个性化-GUI-计算器搭建-Python (五分钟内完成的动物实验)

这个简单的教程将指导你如何在 Python 中使用 Tkinter 轻松制作一个全功能的 GUI 计算器。 7 8...

Selenium成功智能化测试及Chrome驱动经常使用!-Python (selenium是什么意思)

Selenium成功智能化测试及Chrome驱动经常使用!-Python (selenium是什么意思)

本文将引见如何经常使用/target=_blankclass=infotextkey>PythonSelenium库成功智能化测试,并具体记载了Chrome驱动的经常使用方法。 经过本...