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中将字典转换成其json字符串
Jul 16 Python
Python挑选文件夹里宽大于300图片的方法
Mar 05 Python
python采用django框架实现支付宝即时到帐接口
May 17 Python
浅谈Python数据类型之间的转换
Jun 08 Python
Python 多核并行计算的示例代码
Nov 07 Python
详谈python3 numpy-loadtxt的编码问题
Apr 29 Python
python scp 批量同步文件的实现方法
Jan 03 Python
在OpenCV里使用Camshift算法的实现
Nov 22 Python
django 中使用DateTime常用的时间查询方式
Dec 03 Python
Python post请求实现代码实例
Feb 28 Python
Python3爬虫带上cookie的实例代码
Jul 28 Python
Python 把两层列表展开平铺成一层(5种实现方式)
Apr 07 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
PHP开发中常用的三个表单验证函数使用小结
2010/03/03 PHP
php截取后台登陆密码的代码
2012/05/05 PHP
PHPEXCEL 使用小记
2013/01/06 PHP
php实现字符串反转输出的方法
2015/03/14 PHP
PHP学习笔记(一):基本语法之标记、空白、和注释
2015/04/17 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
Laravel 5.1 框架Blade模板引擎用法实例分析
2020/01/04 PHP
javascript的事件描述
2006/09/08 Javascript
懒就要懒到底——鼠标自动点击(含时间判断)
2007/02/20 Javascript
一个js拖拽的效果类和dom-drag.js浅析
2010/07/17 Javascript
用Javascript实现Windows任务管理器的代码
2012/03/27 Javascript
jquery批量控制form禁用的代码
2013/08/06 Javascript
举例说明如何为JavaScript的方法参数设置默认值
2015/11/17 Javascript
javascript运动框架用法实例分析(实现放大与缩小效果)
2016/01/08 Javascript
从重置input file标签中看jQuery的 .val() 和 .attr(“value”) 区别
2016/06/12 Javascript
JavaScript结合Bootstrap仿微信后台多图文界面管理
2016/07/22 Javascript
layer弹窗插件操作方法详解
2017/05/19 Javascript
javascript数组定义的几种方法
2017/10/06 Javascript
json数据传到前台并解析展示成列表的方法
2018/08/06 Javascript
小程序实现选择题选择效果
2018/11/04 Javascript
Echart折线图手柄触发事件示例详解
2018/12/16 Javascript
Python3基础之输入和输出实例分析
2014/08/18 Python
跟老齐学Python之玩转字符串(2)更新篇
2014/09/28 Python
python线程、进程和协程详解
2016/07/19 Python
详解python之heapq模块及排序操作
2019/04/04 Python
python利用wx实现界面按钮和按钮监听和字体改变的方法
2019/07/17 Python
中东奢侈品市场:Coveti
2019/05/12 全球购物
linux面试题参考答案(7)
2012/10/29 面试题
Solaris操作系统的线程机制
2015/07/28 面试题
工商管理专业大学生职业生涯规划范文
2014/03/09 职场文书
2014年学生管理工作总结
2014/12/20 职场文书
企业办公室主任岗位职责
2015/04/01 职场文书
男生贾里读书笔记
2015/06/30 职场文书
Spring Data JPA使用JPQL与原生SQL进行查询的操作
2021/06/15 Java/Android
Android实现图片九宫格
2022/06/28 Java/Android