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 相关文章推荐
RC4文件加密的python实现方法
Jun 30 Python
Python实现命令行通讯录实例教程
Aug 18 Python
pandas将DataFrame的列变成行索引的方法
Apr 10 Python
Python3实现爬虫爬取赶集网列表功能【基于request和BeautifulSoup模块】
Dec 05 Python
深入浅析Python中的迭代器
Jun 04 Python
python issubclass 和 isinstance函数
Jul 25 Python
在python Numpy中求向量和矩阵的范数实例
Aug 26 Python
Python中顺序表原理与实现方法详解
Dec 03 Python
python数据预处理方式 :数据降维
Feb 24 Python
PyCharm GUI界面开发和exe文件生成的实现
Mar 04 Python
Django User 模块之 AbstractUser 扩展详解
Mar 11 Python
从0到1使用python开发一个半自动答题小程序的实现
May 12 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投票系统防刷票判断流程分析
2012/02/04 PHP
PHP回调函数概念与用法实例分析
2017/11/03 PHP
PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】
2019/11/04 PHP
Git命令之分支详解
2021/03/02 PHP
JavaScript创建命名空间(namespace)的最简实现
2007/12/11 Javascript
JavaScript 学习笔记(十一)
2010/01/19 Javascript
jquery keypress,keyup,onpropertychange键盘事件
2010/06/25 Javascript
JS验证邮箱格式是否正确的代码
2013/12/05 Javascript
jQuery过滤选择器用法分析
2015/02/10 Javascript
JavaScript String(字符串)对象的简单实例(推荐)
2016/08/31 Javascript
JS回调函数简单用法示例
2017/02/09 Javascript
JavaScript中利用构造器函数模拟类的方法
2017/02/16 Javascript
webpack2.0搭建前端项目的教程详解
2017/04/05 Javascript
浅谈vue的几种绑定变量的值 防止其改变的方法
2018/03/01 Javascript
angular 表单验证器验证的同时限制输入的实现
2019/04/11 Javascript
jQuery Ajax async=&gt;false异步改为同步时,解决导致浏览器假死的问题
2019/07/22 jQuery
微信小程序中使用 async/await的方法实例分析
2020/05/06 Javascript
go和python调用其它程序并得到程序输出
2014/02/10 Python
Python中字符串格式化str.format的详细介绍
2017/02/17 Python
python中nan与inf转为特定数字方法示例
2017/05/11 Python
python使用tensorflow保存、加载和使用模型的方法
2018/01/31 Python
python高阶爬虫实战分析
2018/07/29 Python
解决Python获取字典dict中不存在的值时出错问题
2018/10/17 Python
Python企业编码生成系统总体系统设计概述
2019/07/26 Python
python3光学字符识别模块tesserocr与pytesseract的使用详解
2020/02/26 Python
使用CSS3来绘制一个月食图案
2015/07/18 HTML / CSS
年度考核自我鉴定
2013/11/09 职场文书
商务助理岗位职责
2013/11/13 职场文书
优秀安全员事迹材料
2014/05/11 职场文书
小学生环保标语
2014/06/13 职场文书
群众路线个人自我剖析材料
2014/10/07 职场文书
学习走群众路线心得体会
2014/11/05 职场文书
2015年招生工作总结
2015/05/04 职场文书
垂直极限观后感
2015/06/08 职场文书
Python包管理工具pip的15 个使用小技巧
2021/05/17 Python
mysql中数据库覆盖导入的几种方式总结
2022/03/25 MySQL