Python 运行 shell 获取输出结果的实例


Posted in Python onJanuary 07, 2019

首先使用内置模块os.

>>> import os
>>> code = os.system("pwd && sleep 2")
# /User/zhipeng
>>> print code
# 0

问题是 os.system 只能获取到结束状态

使用内置模块 subprocess

>>> import subprocess
>>> subprocess.Popen("pwd && sleep 2", shell=True, cwd="/home")
# <subprocess.Popen object at 0x106498310>
# /home

>>> sub = subprocess.Popen("pwd && sleep 2", shell=True, stdout=subprcess.PIPE)
>>> sub.wait()
>>> print sub.stdout.read()
# /User/zhipeng
subprocess.Popen还支持一些别的参数 
bufsize,executable=None, stdin=None, stdout=None, stderr=None 
preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None 
universal_newlines=False, startupinfo=None, creationflags=0

使用第三方模块 sh

# pip install sh
>>> from sh import ifconfig
>>> print ifconfig("eth0")

>>> from sh import bash
>>> bash("pwd")
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "/Library/Python/2.7/site-packages/sh.py", line 1021, in __call__
 return RunningCommand(cmd, call_args, stdin, stdout, stderr)
 File "/Library/Python/2.7/site-packages/sh.py", line 486, in __init__
 self.wait()
 File "/Library/Python/2.7/site-packages/sh.py", line 500, in wait
 self.handle_command_exit_code(exit_code)
 File "/Library/Python/2.7/site-packages/sh.py", line 516, in handle_command_exit_code
 raise exc(self.ran, self.process.stdout, self.process.stderr)
sh.ErrorReturnCode_126: 
 RAN: '/bin/bash ls'
 STDOUT:
 STDERR:
/bin/ls: /bin/ls: cannot execute binary file

# 不能这么用
>>> from sh import ls
>>> ls()
# hello.txt 1.txt
# ls -al
>>> ls(a=True, l=True)
# ls(al=True) 是不可以的

这操作太复杂了, 项目中使用也太糟心了, 也没有办法多个命令同时用.不过可以用别的方式代替

# bash -c command 可以很好的解决这个问题
# bash -c "sleep 1 && pwd"
>>> result = bash(c="pwd", _timeout=1, _cwd="/home")
>>> print result
# -rw-r--r--@ 1 zhipeng staff 0 10 13 18:30 hello.txt
# -rw-r--r--@ 1 zhipeng staff 0 10 13 18:30 1.txt

>>> result = bash(c="pwd", _timeout=1, _cwd="/")
>>> print result
# /
>>> bash(c="pwd && sleep 2", _timeout=1)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "/Library/Python/2.7/site-packages/sh.py", line 1021, in __call__
 return RunningCommand(cmd, call_args, stdin, stdout, stderr)
 File "/Library/Python/2.7/site-packages/sh.py", line 486, in __init__
 self.wait()
 File "/Library/Python/2.7/site-packages/sh.py", line 498, in wait
 raise TimeoutException(-exit_code)
sh.TimeoutException
参数里面可以添加非命令参数. 需要以_开头, 例如上面的_timeout, _cwd. 详见sh.py 源码 

还支持以下参数 

internal_bufsize, err_bufsize, tee, done, in, decode_errors, tty_in, 
out, cwd, timeout_signal, bg, timeout, with, ok_code, err, env, no_out,

参考:

https://github.com/amoffat/sh/blob/master/sh.py
https://github.com/amoffat/sh

以上这篇Python 运行 shell 获取输出结果的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
一篇不错的Python入门教程
Feb 08 Python
Python聚类算法之凝聚层次聚类实例分析
Nov 20 Python
Java多线程编程中ThreadLocal类的用法及深入
Jun 21 Python
Python实现端口检测的方法
Jul 24 Python
Python实现的读取/更改/写入xml文件操作示例
Aug 30 Python
Python图像滤波处理操作示例【基于ImageFilter类】
Jan 03 Python
Pycharm如何打断点的方法步骤
Jun 13 Python
python画双y轴图像的示例代码
Jul 07 Python
Python Request爬取seo.chinaz.com百度权重网站的查询结果过程解析
Aug 13 Python
python爬取本站电子书信息并入库的实现代码
Jan 20 Python
python根据完整路径获得盘名/路径名/文件名/文件扩展名的方法
Apr 22 Python
如何基于Python Matplotlib实现网格动画
Jul 20 Python
在python 中实现运行多条shell命令
Jan 07 #Python
Python之使用adb shell命令启动应用的方法详解
Jan 07 #Python
python 对多个csv文件分别进行处理的方法
Jan 07 #Python
python 同时运行多个程序的实例
Jan 07 #Python
python实现将多个文件分配到多个文件夹的方法
Jan 07 #Python
在python中使用with打开多个文件的方法
Jan 07 #Python
python读取文件名并改名字的实例
Jan 07 #Python
You might like
再说下636单管机
2021/03/02 无线电
php ci 获取表单中多个同名input元素值的代码
2016/03/25 PHP
Yii CFileCache 获取不到值的原因分析
2017/02/08 PHP
Laravel基础-关于引入公共文件的两种方式
2019/10/18 PHP
JavaScript触发器详解
2007/03/10 Javascript
基于jQuery的实现简单的分页控件
2010/10/10 Javascript
jquery 操作iframe的几种方法总结
2013/12/13 Javascript
用C/C++来实现 Node.js 的模块(二)
2014/09/24 Javascript
node.js中的fs.renameSync方法使用说明
2014/12/16 Javascript
Jquery 实现图片轮换
2015/01/28 Javascript
javascript实现了照片拖拽点击置顶的照片墙代码
2015/04/03 Javascript
用Vue.js实现监听属性的变化
2016/11/17 Javascript
详解js中==与===的区别
2017/01/08 Javascript
vue-cli入门之项目结构分析
2017/04/20 Javascript
React Js 微信禁止复制链接分享禁止隐藏右上角菜单功能
2017/05/26 Javascript
使用原生js写ajax实例(推荐)
2017/05/31 Javascript
vue服务端渲染的实例代码
2017/08/28 Javascript
jQuery访问json文件中数据的方法示例
2019/01/28 jQuery
使用JS判断页面是首次被加载还是刷新
2019/05/26 Javascript
layui自己添加图片按钮并点击跳转页面的例子
2019/09/14 Javascript
原生js实现的金山打字小游戏(实例代码详解)
2020/03/16 Javascript
node.js爬虫框架node-crawler初体验
2020/10/29 Javascript
[51:00]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
在Python中使用pngquant压缩png图片的教程
2015/04/09 Python
详解Python设计模式编程中观察者模式与策略模式的运用
2016/03/02 Python
python编写朴素贝叶斯用于文本分类
2017/12/21 Python
对Python中的@classmethod用法详解
2018/04/21 Python
python中利用h5py模块读取h5文件中的主键方法
2018/06/05 Python
详解Python的循环结构知识点
2019/05/20 Python
pygame实现俄罗斯方块游戏(基础篇2)
2019/10/29 Python
解决python 执行shell命令无法获取返回值的问题
2020/12/05 Python
CSS3使用transition属性实现过渡效果
2018/04/18 HTML / CSS
ParcelABC西班牙:包裹运送和快递服务
2019/12/24 全球购物
英国森林假期:Forest Holidays
2021/01/01 全球购物
行政助理岗位职责
2013/11/10 职场文书
2014年售后服务工作总结
2014/11/18 职场文书