python调用第三方工具(命令)的方法及区别

前言python

在上篇《关于os.popen你可能不知道的》中,提到了调用第三方工具或命令的os.popen方法,同时也指出了使用中可能遇到的坑。本文就介绍下python提供了哪些方法能够执行第三方工具或命令,以及它们的用法和区别。web

 

主要方法shell

1.  os.system微信

这个应该是用法最简单的方法了,os.system(“cmd”),直接传入要执行的命令字符串便可。注意返回值,它的返回值不是执行命令的返回结果,若是命令执行成功,则返回0;不然,返回其余值。另外,该方法是阻塞的,也就是说,只有调用的命令执行完毕返回后,才会继续运行后面的代码行。session

 

2.  os.popenide

请参考《关于os.popen你可能不知道的》,再也不赘述。函数

 

3.  Subprocess.Popen工具

subprocess模块是推荐的用来替换一些老的模块和函数,如:os.systemos.popen等,定义了一个类Popen,使用Popen来建立进程,并与进程交互。学习

 

函数原型:spa

class subprocess.Popen(args, bufsize=-1, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=True, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0, restore_signals=True, start_new_session=False, pass_fds=(), *, encoding=None, errors=None)

 

参数解释:

参数名

参数说明

args

字符串或列表

bufsize

0-无缓冲;1-行缓冲;其余正值-缓冲区大小;负值-默认系统缓冲(通常全缓冲)

executable

通常不用,args字符串或列表第一项表示程序名

stdin

stdout

stderr

None-没有重定向,继承父进程

PIPE-建立管道

文件对象

文件描述符

stderr还可设置为STDOUT

preexec_fn

钩子函数,在forkexec之间执行(unix

close_fds

Unix下执行新进程前是否关闭0/1/2以外的文件;

Windows下是否继承父进程的文件描述符

shell

若是设置为True,则unix下至关于args前面加”/bin/sh”  “-c”;

Windows下至关于添加”cmd.exe  /c”

cmd

设置工做目录

env

设置环境变量

universal_newlines

各类换行符统一处理成”\n”

startupinfo

Windows下传递给CreateProcess的结构体

creationflags

Windows下传递CREATE_NEW_CONSOLE建立本身的控制台窗口

 

Popen提供的参数数量就能感知其功能强大,但使用Popen函数注意:若是运行cmd命令时产生内容很是多,而标准输出使用subprocess提供的PIPE,输出内容可能塞满缓冲区,形成阻塞。通常的解决方法是自定义文件流代替标准输出的subprocess.PIPE

 

4.  subprocess.call

 

函数原型:

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

 

函数解释:

Run the command described by args. Wait for command to complete, then return the returncode attribute

 

该函数执行args接收的命令,等待命令执行完成,而后返回returncode

 

从函数解释可知,该函数是阻塞型的,会一直等待子进程运行结束,并返回进程的returncode后,才会继续运行程序后面的代码行。若是不须要与子进程进行交互,且须要阻塞,可使用该函数来完成任务。

 

总结

在调用第三方工具的方法上,python自己提供了至关多的实现方法,咱们在使用时,须要根据实际问题、各类方法的特性进行选择。

 

其余资源

关于python学习、分享、交流,笔者开通了微信公众号小蟒社区】,感兴趣的朋友能够关注下,欢迎加入,创建属于咱们本身的小圈子,一块儿学python

相关文章
相关标签/搜索