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 相关文章推荐
多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
Jan 17 Python
python多线程编程方式分析示例详解
Dec 06 Python
使用Python快速搭建HTTP服务和文件共享服务的实例讲解
Jun 04 Python
python实现在图片上画特定大小角度矩形框
Oct 24 Python
python 2.7 检测一个网页是否能正常访问的方法
Dec 26 Python
python实现复制文件到指定目录
Oct 16 Python
python抓取多种类型的页面方法实例
Nov 20 Python
Python Numpy数组扩展repeat和tile使用实例解析
Dec 09 Python
Python迷宫生成和迷宫破解算法实例
Dec 24 Python
python有序查找算法 二分法实例解析
Feb 18 Python
如何用Python 实现全连接神经网络(Multi-layer Perceptron)
Oct 15 Python
Python NumPy灰度图像的压缩原理讲解
Aug 04 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 高级课程笔记 面向对象
2009/06/21 PHP
PHP对象克隆clone用法示例
2016/09/28 PHP
php实现的中文分词类完整实例
2017/02/06 PHP
PHP中类的自动加载的方法
2017/03/17 PHP
DOM相关内容速查手册
2007/02/07 Javascript
使用prototype.js 的时候应该特别注意的几个问题.
2007/04/12 Javascript
jQuery.query.js 取参数的两点问题分析
2012/08/06 Javascript
JQuery实现绚丽的横向下拉菜单
2013/12/19 Javascript
基于jQuery创建鼠标悬停效果的方法
2015/03/07 Javascript
js实现简单锁屏功能实例
2015/05/27 Javascript
Hallo.js基于jQuery UI所见即所得的Web编辑器
2016/01/26 Javascript
Node.js编写爬虫的基本思路及抓取百度图片的实例分享
2016/03/12 Javascript
jQuery时间日期三级联动(推荐)
2016/11/27 Javascript
Node.js中Bootstrap-table的两种分页的实现方法
2017/09/18 Javascript
详细介绍RxJS在Angular中的应用
2017/09/23 Javascript
JQuery判断radio单选框是否选中并获取值的方法
2019/01/17 jQuery
node.js命令行教程图文详解
2019/05/27 Javascript
解决jquery validate 验证不通过后验证正确的信息仍残留在label上的方法
2019/08/27 jQuery
VUEX采坑之路之获取不到$store的解决方法
2019/11/08 Javascript
pyqt4教程之实现windows窗口小示例分享
2014/03/07 Python
python文件写入实例分析
2015/04/08 Python
Python求解任意闭区间的所有素数
2018/06/10 Python
详解Python下载图片并保存本地的两种方式
2019/05/15 Python
Python修改列表值问题解决方案
2020/03/06 Python
Python 如何实现访问者模式
2020/07/28 Python
pycharm 实现调试窗口恢复
2021/02/05 Python
html5手机键盘弹出收起的处理
2020/01/20 HTML / CSS
英国知名的护肤彩妆与时尚配饰大型综合零售电商:Unineed
2016/11/21 全球购物
马来西亚领先的在线礼品店:Giftr
2018/08/23 全球购物
寄语十八大感言
2014/02/07 职场文书
客户经理竞聘演讲稿
2014/05/15 职场文书
个人四风问题原因分析及整改措施
2014/09/28 职场文书
获奖感言一句话
2015/07/31 职场文书
导游词之麻姑仙境
2019/11/18 职场文书
HTML5简单实现添加背景音乐的几种方法
2021/05/12 HTML / CSS
mybatis中sql语句CDATA标签的用法说明
2021/06/30 Java/Android