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 相关文章推荐
关于Django显示时间你应该知道的一些问题
Dec 25 Python
python使用Tesseract库识别验证
Mar 21 Python
Pycharm取消py脚本中SQL识别的方法
Nov 29 Python
python读取有密码的zip压缩文件实例
Feb 08 Python
python交互界面的退出方法
Feb 16 Python
Python切片操作去除字符串首尾的空格
Apr 22 Python
为什么你还不懂得怎么使用Python协程
May 13 Python
Python字典生成式、集合生成式、生成器用法实例分析
Jan 07 Python
python 链接sqlserver 写接口实例
Mar 11 Python
python操作yaml说明
Apr 08 Python
python怎么调用自己的函数
Jul 01 Python
互斥锁解决 Python 中多线程共享全局变量的问题(推荐)
Sep 28 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函数getenv简介和使用实例
2014/05/12 PHP
PHP文件系统管理(实例讲解)
2017/09/19 PHP
PHP 使用二进制保存用户状态的实例
2018/01/29 PHP
php框架CodeIgniter主从数据库配置方法分析
2018/05/25 PHP
PHP parse_ini_file函数的应用与扩展操作示例
2019/01/07 PHP
PHP crypt()函数的用法讲解
2019/02/15 PHP
php实现的数组转xml案例分析
2019/09/28 PHP
php模拟实现斗地主发牌
2020/04/22 PHP
初探jquery——表单应用范例
2007/02/20 Javascript
JavaScript 核心参考教程 内置对象
2009/10/13 Javascript
JavaScript 布尔操作符解析  &amp;&amp; || !
2012/08/10 Javascript
在图片上显示左右箭头类似翻页的代码
2013/03/04 Javascript
客户端js性能优化小技巧整理
2013/11/05 Javascript
原生Ajax 和jQuery Ajax的区别示例分析
2014/12/17 Javascript
js实现跨域的几种方法汇总(图片ping、JSONP和CORS)
2015/10/25 Javascript
灵活使用数组制作图片切换js实现
2016/07/28 Javascript
需要牢记的JavaScript基础知识
2016/09/25 Javascript
Vue + Webpack + Vue-loader学习教程之相关配置篇
2017/03/14 Javascript
Node.js 回调函数实例详解
2017/07/06 Javascript
webpack配置sass模块的加载的方法
2017/07/30 Javascript
Nodejs中的JWT和Session的使用
2018/08/21 NodeJs
pageGroup.js实现分页功能
2019/07/27 Javascript
layui数据表格跨行自动合并的例子
2019/09/02 Javascript
刷新页面后让控制台的js代码继续执行
2019/09/20 Javascript
在nodejs中创建child process的方法
2021/01/26 NodeJs
python文件与目录操作实例详解
2016/02/22 Python
python3实现域名查询和whois查询功能
2018/06/21 Python
Python队列、进程间通信、线程案例
2019/10/25 Python
计算机应用专业应届毕业生中文求职信范文
2013/11/29 职场文书
自动化专业个人求职信范文
2013/11/29 职场文书
先进个人获奖感言
2014/01/24 职场文书
委托公证书
2014/04/08 职场文书
优秀本科毕业生自荐信
2014/07/04 职场文书
2015年植树节活动总结
2015/02/06 职场文书
七夕情人节问候语
2015/11/11 职场文书
logback 实现给变量指定默认值
2021/08/30 Java/Android