Python 运行 shell 获取输出结果的实例
2019-01-08 00:04
771 查看
首先使用内置模块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 运行 shell 获取输出结果
- python 捕获 shell/bash 脚本的输出结果实例
- python 捕获shell脚本的输出结果实例
- python 捕获 shell/bash 脚本的输出结果实例
- Python实现获取命令行输出结果的方法
- Python3.6笔记之将程序运行结果输出到文件的方法
- python 执行shell命令并将结果保存的实例
- python获取命令行输出结果
- python os popen 获取system运行结果
- python 捕获 shell/bash 脚本的输出结果
- python运行shell命令并得到返回结果(比C++方便多了)
- python:subprocess模块替代os模块获取shell的输出
- python获取命令行输出结果
- Python:从subprocess运行的子进程中实时获取输出
- sqlserver中sp_executesql使用实例(获取动态sql输出结果)
- Python3.6笔记之将程序运行结果输出到文件
- c++使用动态规划dp(自底向上)重构解决钢条切割输出最大收益和切割方案及运行实例结果
- 利用Python分析GP服务运行结果的输出路径 & 实现服务输出路径的本地化 分类: Python ArcGIS for desktop ArcGIS for server 2015-08-06 19:49 3人阅读 评论(0) 收藏
- c++使用动态规划dp(自底向上)重构解决钢条切割输出最大收益和切割方案及运行实例结果
- Linxu程序内部嵌入shell终端指令并获取该指令的输出结果