Python常用外部指令执行代码实例


Posted in Python onNovember 05, 2020

1、os.system()

阻塞

屏幕会打印命令的输出

返回命令结果码

# -*- encoding=utf-8 -*-
import os
if __name__ == '__main__':
  pass
  print('开始')
  ret1 = os.system('python')
  print('ret1:{}'.format(ret1))
  ret2 = os.system('java -version')
  print('ret2:{}'.format(ret2))
  print('结束')

运行

Python常用外部指令执行代码实例

可能有人理解阻塞是因为运行了python,因此我尝试两个命令都用java -version

# -*- encoding=utf-8 -*-

import os

if __name__ == '__main__':
  pass
  print('开始')
  ret1 = os.system('java -version')
  print('ret1:{}'.format(ret1))
  ret2 = os.system('java -version')
  print('ret2:{}'.format(ret2))
  print('结束')

运行

Python常用外部指令执行代码实例

2、os.popen()

阻塞或不阻塞

屏幕不会打印出命令的输出

返回文件对象,可用read,readline读取

不阻塞时:

# -*- encoding=utf-8 -*-
import os
if __name__ == '__main__':
  pass
  print('开始')
  os.popen('python')
  ret2 = os.popen('java -version')
  print('结束')

运行(程序很快打印开始和结束,就像只用了两个print语句一样快)

Python常用外部指令执行代码实例

阻塞时:

# -*- encoding=utf-8 -*-
import os
if __name__ == '__main__':
  pass
  print('开始')
  ret1 = os.popen('python')
  print(ret1.read())
  ret2 = os.popen('java -version')
  print(ret2.read())
  print('结束')

运行

Python常用外部指令执行代码实例

3、commands.getstatusoutput

python2.+中使用

需要到linux运行

阻塞或者非阻塞

屏幕不会打印出命令的输出

非阻塞时

# -*- encoding=utf-8 -*-
import commands
if __name__ == '__main__':
  pass
  print('开始')
  ret1 = commands.getstatusoutput('python')
  ret2 = commands.getstatusoutput('java -version')
  print('结束')

运行

Python常用外部指令执行代码实例

阻塞时:

# -*- encoding=utf-8 -*-
import commands
if __name__ == '__main__':
  pass
  print('开始')
  ret1 = commands.getstatusoutput('python')
  print ret1[0]
  print ret1[1]
  print '=============='
  ret2 = commands.getstatusoutput('java -version')
  print ret2[0]
  print ret2[1]
  print '=============='
  print('结束')

运行

Python常用外部指令执行代码实例

4、subprocess中Popen

阻塞或非阻塞,同上面一样,通过是否读取IO决定是否阻塞

屏幕会打印出命令的输出

可通过stdout,stderr参数指定输出或错误打印到文件

# -*- encoding=utf-8 -*-
import subprocess
if __name__ == '__main__':
  pass
  print('开始')
  s1 = subprocess.Popen('python')
  s1.wait()
  s2 = subprocess.Popen('java -version')
  s2.wait()
  print('结束')

运行

Python常用外部指令执行代码实例

4.1、 输出到文件

通过文件对象来输出到文件中

# -*- encoding=utf-8 -*-
import subprocess
if __name__ == '__main__':
  pass
  print('开始')
  with open('s1.txt', 'w') as f:
    s1 = subprocess.Popen('python', stdout=f, ) # 指定输出重定向到文件
    s1.wait(10) # 超过10秒还没执行完会抛出异常
  with open('s2.txt', 'w') as f:
    s2 = subprocess.Popen('java -version', stdout=f, stderr=f) # 指定输出和错误都重定向到文件
    s2.wait()
  print('结束')

运行后可看到文件已经写入,屏幕不打印。需要注意是stdout还是stderr。

4.2、捕获输出和错误

PIPE通过开一个新的管道来接收运行状态

# -*- encoding=utf-8 -*-

import subprocess

if __name__ == '__main__':
  pass
  print('开始')
  s1 = subprocess.Popen('java -version', stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  s1.wait(10) # 超过10秒还没执行完会抛出异常
  print(s1.returncode) # 结果码
  print(s1.poll()) # 已经执行结束返回结果码,否则返回None
  std1 = s1.stdout.read()
  print('std_out:{}'.format(std1))
  std2 = s1.stderr.read()
  print('std_err:{}'.format(std2))
  print('结束')

运行

Python常用外部指令执行代码实例

5、subprocess.call

用来替代os.system

阻塞

# -*- encoding=utf-8 -*-
import subprocess
if __name__ == '__main__':
  pass
  print('开始')
  s1 = subprocess.call('java -version', )
  print(s1)
  s2 = subprocess.call('python', )
  print(s2)
  s3 = subprocess.call('python', timeout=3) # 超时抛出异常
  print(s3)
  print('结束')

6、check_call()和check_output()

都会检查结果码,不是0就抛出异常

check_call()返回状态码

check_output()返回输出

# -*- encoding=utf-8 -*-
import subprocess
if __name__ == '__main__':
  pass
  print('开始')
  s1 = subprocess.check_call('java -version', )
  print(s1)
  s2 = subprocess.check_output('java -version', )
  print(s2)
  print('结束')

运行

Python常用外部指令执行代码实例

使用上面提到的三个方法:call()、check_call() 和 check_output() 时,尽量不要将参数stderr和stdout设置为 subprocess.PIPE,这几个函数默认都会等待子进程完成,子进程产生大量的输出数据如果造成管道堵塞,父进程再等待子进程完成可能造成死锁。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python常见文件操作的函数示例代码
Nov 15 Python
python查找第k小元素代码分享
Dec 18 Python
Python中设置变量作为默认值时容易遇到的错误
Apr 03 Python
利用pyinstaller将py文件打包为exe的方法
May 14 Python
python 实现对文件夹中的图像连续重命名方法
Oct 25 Python
Python倒排索引之查找包含某主题或单词的文件
Nov 13 Python
Python2.7:使用Pyhook模块监听鼠标键盘事件-获取坐标实例
Mar 14 Python
Python实现代码块儿折叠
Apr 15 Python
python保留格式汇总各部门excel内容的实现思路
Jun 01 Python
Python压缩模块zipfile实现原理及用法解析
Aug 14 Python
2020版Python学习路线图(附学习资料)
Sep 15 Python
python利用xlsxwriter模块 操作 Excel
Oct 14 Python
Python Pandas数据分析工具用法实例
Nov 05 #Python
Python jieba结巴分词原理及用法解析
Nov 05 #Python
Python根据字符串调用函数过程解析
Nov 05 #Python
python报错TypeError: ‘NoneType‘ object is not subscriptable的解决方法
Nov 05 #Python
Python利用matplotlib绘制折线图的新手教程
Nov 05 #Python
详解Django中异步任务之django-celery
Nov 05 #Python
Python Django路径配置实现过程解析
Nov 05 #Python
You might like
php遍历目录与文件夹的多种方法详解
2013/11/14 PHP
PHP清除数组中所有字符串两端空格的方法
2014/10/20 PHP
PHP实现打包下载文件的方法示例
2017/10/07 PHP
PHP实现获取url地址中顶级域名的方法示例
2019/06/05 PHP
微信小程序发送订阅消息的方法(php 为例)
2019/10/30 PHP
对联广告js flash激活
2006/10/19 Javascript
getElementByIdx_x js自定义getElementById函数
2012/01/24 Javascript
解析JavaScript中delete操作符不能删除的对象
2013/12/03 Javascript
javascript页面渲染速度测试脚本分享
2014/04/15 Javascript
jQuery原型属性和原型方法详解
2015/07/07 Javascript
Nodejs爬虫进阶教程之异步并发控制
2016/02/15 NodeJs
WebApi+Bootstrap+KnockoutJs打造单页面程序
2016/05/16 Javascript
es6中的解构赋值、扩展运算符和rest参数使用详解
2017/09/28 Javascript
使用express搭建一个简单的查询服务器的方法
2018/02/09 Javascript
基于Vue实现微信小程序的图文编辑器
2018/07/25 Javascript
详解Webpack多环境代码打包的方法
2018/08/03 Javascript
微信小程序自定义弹窗实现详解(可通用)
2019/07/04 Javascript
Vue使用富文本编辑器Vue-Quill-Editor(含图片自定义上传服务、清除复制粘贴样式等)
2020/05/15 Javascript
JavaScript forEach中return失效问题解决方案
2020/06/01 Javascript
[01:07:17]EG vs Optic Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
[01:22:28]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第一场 1月18日
2021/03/11 DOTA
Python中的字典遍历备忘
2015/01/17 Python
使用Python的Django框架实现事务交易管理的教程
2015/04/20 Python
Python+Turtle动态绘制一棵树实例分享
2018/01/16 Python
python实战教程之自动扫雷
2018/07/13 Python
python对常见数据类型的遍历解析
2019/08/27 Python
Python分割训练集和测试集的方法示例
2019/09/19 Python
Python3标准库之threading进程中管理并发操作方法
2020/03/30 Python
柯基袜:Corgi Socks
2017/01/26 全球购物
澳大利亚在线购买儿童玩具:Toy Universe
2017/12/28 全球购物
ktv中秋节活动方案
2014/01/30 职场文书
幼儿园教师的考核评语
2014/04/18 职场文书
电子专业求职信
2014/06/19 职场文书
家属答谢词
2015/01/05 职场文书
中学生综合素质自我评价
2015/03/06 职场文书
保险内勤岗位职责
2015/04/13 职场文书