一. 最近subprocess使用背景和介绍

因为最近领导要求,在Python端调用大数据的shell脚本,所以需要用到Python来执行shell脚本, 因此需要查看下subprocess模块文档。

根据官网文档描述:subprocess模块用于创建子进程, 这个模块用于替换旧版本中的一些模块, 如:os.system,

os.spawn*, os.popen*, os.popen*, popen2.*, commands.*, subprocess允许你能创建很多子进程, 创建的时候能能指定子进程和子进程的输入、输出、错误输出管道, 执行后能获取输出结果和执行状态。

二. subprocess模块的常用方法用法介绍

subprocess.run()   --> python3.5中新增的函数, 执行指定的命令, 等待命令执行完成后返回一个包含执行结果的                CompletedProcess类的实例。

subprocess.call():   --> 执行指定的命令, 返回命令执行状态, 功能类似羽os.system(cmd)

subprocess.check_call():  -->  python2.5中新增的函数, 执行指定的命令, 如果执行成功则返回状态码, 否则抛出异常。

【Tips】: 在python3.5之后的版本中, 官方文档中提倡通过subprocess.run()函数替代其他函数来使用subprocess模块的功能。在python3.5之前的版本中, 我们可以通过subprocess.call()来使用subprocess模块的功能。subprocess.run(), subprocess.call(), subprocess.check_call()都是通过对subprocess.Popen的封装来实现的高级函数。

三. 这几个函数的定义以及参数

subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, shell=False, timeout=None, check=False, universal_newlines=False)subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False, timeout=None)subprocess.check_call(args, *, stdin=None, stdout=None, stderr=None, shell=False, timeout=None)

参数说明:

args: 要执行的shell命令, 默认应该是一个字符串序列, 如['ls', '-l'], 也可以是一个字符串如: 'ls -l', 但是此时需要把shell参数的值置为True。

【Tips】--> shell=True参数会让subprocess.call接受字符串类型的变量作为命令, 并调用shell去执行这个字符串, 当shell=False时, subprocess.call只接受数组变量作为命令, 并将数组的第一个元素作为命令, 剩下的全部作为该命令的参数。官方不推荐使用shell=True。

案例:

四. subprocess.CompletedProcess类介绍

subprocess.run()函数是python3.5中新增的一个高级函数, 其返回值是一个subprocess.CompleteProcess类的实例, 它表示的是一个已结束进程的状态信息。 包含属性如下:

args --> 用于加载该进程的参数, 这可能是一个列表或一个字符串

returncode  --> 子进程的的退出状态码, 通常情况下, 退出状态码0表示进程成功运行了, 一个负值-N表示这个子进程被信号N终止了。

五. subprocess.Popen介绍

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,startup_info=None, creationflags=0, restore_signals=True, start_new_session=False, pass_fds=())

subprocess.Popen类的实例的一些方法:

方法 描述
Popen.poll() 用于检查子进程是否已经执行结束, 没结束返回None, 结束后返回状态码
Popen.wait(timeout=None) 等待子进程结束, 并返回状态码, 如果在timeout指定的秒数之后进程还没有结束, 将会抛出一个TimeoutExpired异常
Poen.communicate(input=None, timeout=None) 该方法可用来与进程进行交互, 比如发送数据到stdin, 从stdout和stderr读取数据, 直到到达文件末尾
Popen.send_signal(signal) 发送指定的信号给这个子进程
Popen.terminate() 停止该子进程
Popen.kill() 杀死该子进程
    六. 在服务器上实际应用
       

封装一个subprocess.Popen的方法

python中执行shell脚本之subprocess模块相关推荐

  1. python中执行shell脚本之subprocess模块_如何使用Python中的subprocess模块检查shell脚本的状态?...

    我有一个简单的Python脚本,它将使用Python中的subprocessmdoule来执行shell脚本.在 下面是我的pythonshell脚本,它正在调用testing.shshell脚本,它 ...

  2. python中执行shell脚本之subprocess模块,python用subprocess执行shell脚本

    用subprocess中的Popen() 方法来得到shell脚本的一些运行结果,并且也可以指定不同的shell内核. 其构造函数为: class subprocess.Popen(args, buf ...

  3. python调用shell命令-在Python中执行shell命令的6种方法,你都知道吗?

    原标题:在Python中执行shell命令的6种方法,你都知道吗? Python经常被称作"胶水语言",因为它能够轻易地操作其他程序,轻易地包装使用其他语言编写的库.今天我们就讲解 ...

  4. python自带的shell是什么-python中执行shell的两种方法总结

    一.使用python内置commands模块执行shell commands对Python的os.popen()进行了封装,使用SHELL命令字符串作为其参数,返回命令的结果数据以及命令执行的状态: ...

  5. python定时任务执行shell脚本切割Nginx日志-慎用

    Python定时任务执行shell脚本切割Nginx日志(慎用) 缘起 我们有一个Nginx服务用来接收埋点上报数据,输出的日志文件比较大,Nginx没有自带日志分割组件,这样输出的日志文件就比较大, ...

  6. Linux中执行shell脚本的4种方法

    这篇文章主要介绍了Linux中执行shell脚本的4种方法总结,即在Linux中运行shell脚本的4种方法,需要的朋友可以参考下. bash shell 脚本的方法有多种,现在作个小结.假设我们编写 ...

  7. python调用shell命令-python中执行shell命令的几个方法小结

    最近有个需求就是页面上执行shell命令,第一想到的就是os.system, 复制代码 代码如下: os.system('cat /proc/cpuinfo') 但是发现页面上打印的命令执行结果 0或 ...

  8. aix shell脚本 运行java_Linux中执行shell脚本的4种方法总结

    Linux中执行shell脚本的4种方法总结,即在Linux中运行shell脚本的4种方法: 方法一:切换到shell脚本所在的目录(此时,称为工作目录)执行shell脚本: 复制代码 代码如下: c ...

  9. Linux中执行shell脚本的5种方法总结

    Linux中执行shell脚本的4种方法总结,即在Linux中运行shell脚本的4种方法: 方法一:切换到shell脚本所在的目录(此时,称为工作目录)执行shell脚本: 复制代码 代码如下: c ...

最新文章

  1. idea下,Jetty采用main方法启动web项目
  2. Java LinkedHashMap的实现原理详解
  3. android 6.0版本名字,棉花糖Marshmallow 是Android 6.0的名字
  4. 训练日志 2019.4.13
  5. Chrome 更新导致部分 macOS 的文件系统损坏,无法重启
  6. 模拟登陆github
  7. CODE[VS] 1474 十进制转m进制
  8. 极客大学产品经理训练营:数据分析 第八章作业
  9. 58java面试题_58到家,java开发实际面试题
  10. 国内外自动驾驶仿真软件总结
  11. 天涯明月刀服务器位置都在哪里,天涯明月刀手游好友服务器怎么查看 怎么看好友在哪个区?[多图]...
  12. MATLAB 超定方程组 最小二乘法
  13. SecureCRT的安装破解
  14. 中文点阵字库的使用方法
  15. 旋转立方体相册HTML+CSS
  16. 商业研究(17):以小见大,看互联网经济(4个股权众筹平台,4个领域,10个项目,8个图)
  17. 绘制logo软件-AI(illustrator)
  18. 浅谈Sun Solaris启动
  19. 苹果App Store公布最新应用审核标准:更加严格
  20. linux延时函数及头文件,linux延时函数

热门文章

  1. 银行智慧网点如此建设,用银行ATM自助服务终端无线联网方案
  2. git撤回已经commit未push的操作
  3. photoshop切片使用教程
  4. 感谢CSDN提名我候选2006最有价值博客,感谢朋友们的投票
  5. Java 作业 金额的中文大写方式
  6. 计算机中的CPU和显卡
  7. matlab2016b自定义极坐标区 - matlab给极坐标图加度数符号
  8. 将struts2的action交给spring管理及注意事项
  9. 中国第一代程序员简史:中国龙简晶的程序人生 | CSDN 人物志
  10. 计算机做表格的行高和列宽,表格中列和行的插入与删除及行高和列宽的调整——想象力电脑应用...