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实现拓扑排序的基本教程
Mar 11 Python
Python基于win32ui模块创建弹出式菜单示例
May 09 Python
python并发和异步编程实例
Nov 15 Python
使用Python实现企业微信的自动打卡功能
Apr 30 Python
python监控nginx端口和进程状态
Sep 06 Python
python爬虫中多线程的使用详解
Sep 23 Python
基于Python获取城市近7天天气预报
Nov 26 Python
详解Open Folder as PyCharm Project怎么添加的方法
Dec 29 Python
Python如何实现Paramiko的二次封装
Jan 30 Python
Python中常见的反爬机制及其破解方法总结
Jun 10 Python
Python使用psutil库对系统数据进行采集监控的方法
Aug 23 Python
Python中tqdm的使用和例子
Sep 23 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不用第三变量交换2个变量的值的解决方法
2013/06/02 PHP
深入php var_dump()函数的详解
2013/06/05 PHP
php访问数组最后一个元素的函数end()用法
2015/03/18 PHP
php关联数组快速排序的方法
2015/04/17 PHP
PHP的压缩函数实现:gzencode、gzdeflate和gzcompress的区别
2016/01/27 PHP
php 微信开发获取用户信息如何实现
2016/12/13 PHP
cookie的secure属性详解
2015/04/08 Javascript
js实现时间显示几天前、几小时前或者几分钟前的方法集锦
2015/05/29 Javascript
详细解读AngularJS中的表单验证编程
2015/06/19 Javascript
dedecms页面如何获取会员状态的实例代码
2016/03/15 Javascript
漫谈JS引擎的运行机制 你应该知道什么
2016/06/15 Javascript
AngularJs  Creating Services详解及示例代码
2016/09/02 Javascript
Nodejs下DNS缓存问题浅析
2016/11/16 NodeJs
Vue实例简单方法介绍
2017/01/20 Javascript
angularJs-$http实现百度搜索时的动态下拉框示例
2018/02/27 Javascript
详解JS转换数值函数Number()、parseInt()、parseFloat()
2018/08/24 Javascript
vue实现拖拽的简单案例 不超出可视区域
2019/07/25 Javascript
layui导出所有数据的例子
2019/09/10 Javascript
微信小程序和H5页面间相互跳转代码实例
2019/09/19 Javascript
Javascript模块化机制实现原理详解
2020/04/02 Javascript
javascript实现京东快递单号的查询效果
2020/11/30 Javascript
python之wxPython应用实例
2014/09/28 Python
python getopt详解及简单实例
2016/12/30 Python
Python基于tkinter模块实现的改名小工具示例
2017/07/27 Python
python中map的基本用法示例
2018/09/10 Python
在Python运行时动态查看进程内部信息的方法
2019/02/22 Python
python实现的发邮件功能示例
2019/09/11 Python
win10子系统python开发环境准备及kenlm和nltk的使用教程
2019/10/14 Python
python3中利用filter函数输出小于某个数的所有回文数实例
2019/11/24 Python
Python实现初始化不同的变量类型为空值
2020/06/02 Python
pycharm 2020 1.1的安装流程
2020/09/29 Python
HTML5之SVG 2D入门9—蒙板及mask元素介绍与应用
2013/01/30 HTML / CSS
办公室主任岗位职责
2013/11/08 职场文书
餐饮管理自我介绍信
2014/01/15 职场文书
公安纪律作风整顿剖析材料
2014/10/10 职场文书
redis数据结构之压缩列表
2022/03/21 Redis