在写代码的时候,我们经常会遇到需要在Python程序中打开外部程序,那么如何在Python中打开外部程序呢?今天我们就来介绍四种不同的方式,供大家参考收藏。使用os.system()os.system(command)是最简单的方法,我们导入os模块并调用它的system()方法。参考下面的例子:我用简单的两行代码就可以打开我电脑上的qq程序。因为我是macOS系统,所以需要在可执行文件前加一个open。如果是windows,我只需要填写可执行文件的绝对名称即可。只是路径。现在我们可以调用一个稍微复杂一点的命令来调用Python中的ping命令:但是os.system()的缺点是无法获取调用后的返回结果,只能通过:os.system("pingwww.baidu.com>result.txt")将结果通过管道传输到本地文件。系统的返回值只会是0(成功),1和2失败。总结起来,system()一共做了三件事:从主进程中fork出一个子进程。在子进程中调用python的exec函数执行命令。在主进程中调用wait(阻塞)等待子进程结束。如果fork失败,则system()函数返回-1。使用os.popen()os.popen(command)的调用方式与os.system()类似,但它是通过创建管道fork子进程来实现调用程序的。我们可以通过读取popen的返回对象来获取执行结果。在上面的代码中,我们可以发现,对返回的对象执行read()方法,就可以得到程序执行后的返回结果。使用subprocess.open()subprocess模块??用于在Python中生成子流程,可以连接子流程的标准输入输出,可以获取子流程的返回值。下面是subprocess.Popen()模块的参数定义:subprocess.Popen()参数解释:下面通过subprocess.Popen()执行树形命令,树形结构显示当前下的所有文件和目录程序路径:Popen的参数可以是字符串也可以是列表。参考下面两个例子:subprocess.Popen(["cat","test.md"])subprocess.Popen("cattest.txt",shell=True)Popen()还有更高级的用法,请参考学习的官方文档。使用subprocess.call()子进程模块还有一个call()方法,可以用来更方便地调用外部命令。subprocess.call(*popenargs,**kwargs)call的使用方法和Popen基本一致,没有太大区别。这里我们再介绍一种使用方法。总结:os.system()用于简单执行命令并显示执行结果。os.popen()用于简单的执行命令,不能显示执行结果,可以通过变量返回执行结果。subprocess.Popen()用于执行复杂命令,显示执行结果,设置输出内容。subprocess.call()用于执行复杂命令,显示执行结果,设置输出内容。
