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实现Adapter模式实例代码
Feb 09 Python
python3判断url链接是否为404的方法
Aug 10 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
Aug 28 Python
python实现代码统计程序
Sep 19 Python
在django-xadmin中APScheduler的启动初始化实例
Nov 15 Python
Tensorflow中tf.ConfigProto()的用法详解
Feb 06 Python
Django DRF路由与扩展功能的实现
Jun 03 Python
python 如何调用远程接口
Sep 11 Python
python如何调用php文件中的函数详解
Dec 29 Python
Python初学者必备的文件读写指南
Jun 23 Python
手把手教你实现PyTorch的MNIST数据集
Jun 28 Python
Pytorch中使用ImageFolder读取数据集时忽略特定文件
Mar 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 array_multisort()函数的使用札记
2011/07/03 PHP
PHP PDO fetch 模式各种参数的输出结果一览
2015/01/07 PHP
php进行ip地址掩码运算处理的方法
2016/07/11 PHP
PHP实现的只保留字符串首尾字符功能示例【隐藏部分字符串】
2019/03/11 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
背景音乐每次刷新都可以自动更换
2007/02/01 Javascript
小型js框架veryide.librar源代码
2009/03/05 Javascript
jQuery级联操作绑定事件实例
2014/09/02 Javascript
修复jQuery tablesorter无法正确排序的bug(加千分位数字后)
2016/03/30 Javascript
jQuery获取及设置表单input各种类型值的方法小结
2016/05/24 Javascript
HTML5基于Tomcat 7.0实现WebSocket连接并实现简单的实时聊天
2016/10/31 Javascript
js实现打地鼠小游戏
2017/02/13 Javascript
原生js实现可拖拽效果
2017/02/28 Javascript
利用require.js与angular搭建spa应用的方法实例
2017/07/19 Javascript
nodejs async异步常用函数总结(推荐)
2017/11/17 NodeJs
关于laydate.js加载laydate.css路径错误问题解决
2017/12/27 Javascript
jquery.onoff实现简单的开关按钮功能(推荐)
2018/05/24 jQuery
JSON字符串操作移除空串更改key/value的介绍
2019/01/05 Javascript
vue@cli3项目模板怎么使用public目录下的静态文件
2020/07/07 Javascript
Python中利用原始套接字进行网络编程的示例
2015/05/04 Python
Python求一批字符串的最长公共前缀算法示例
2019/03/02 Python
Python多线程threading join和守护线程setDeamon原理详解
2020/03/18 Python
使用Pytorch搭建模型的步骤
2020/11/16 Python
Python实现微信表情包炸群功能
2021/01/28 Python
详解python3 GUI刷屏器(附源码)
2021/02/18 Python
墨尔本复古时尚品牌:Dangerfield
2018/12/12 全球购物
存储过程的优缺点是什么
2015/01/10 面试题
杭州联环马网络笔试题面试题
2013/08/04 面试题
见习期自我鉴定
2014/01/31 职场文书
物控部经理职务说明书
2014/02/25 职场文书
审计专业自荐信范文
2014/04/21 职场文书
供货协议书
2014/04/22 职场文书
交通安全教育主题班会
2015/08/12 职场文书
看古人们是如何赞美老师的?
2019/07/08 职场文书
Python 语言实现六大查找算法
2021/06/30 Python
十大动画制作软件,Adobe产品上榜两款,第一是行业标准软件
2022/03/18 杂记