Python调用shell命令常用方法(4种)


Posted in Python onMay 11, 2020

方法一、使用os模块的system方法:os.system(cmd),其返回值是shell指令运行后返回的状态码,int类型,0表示shell指令成功执行,256表示未找到,该方法适用于shell命令不需要输出内容的场景。

举例说明:

1. 列举当前目录下的所有文件。

import os
val = os.system('ls -al')
print val

Python调用shell命令常用方法(4种)

没有找到时,sh返回的状态码是1,而适用python调用,返回的是:256

Python调用shell命令常用方法(4种)

方法二、使用os.popen(),该方法以文件的形式返回shell指令运行后的结果,需要获取内容时可使用read()或readlines()方法,举例如下:

Python调用shell命令常用方法(4种)

Python调用shell命令常用方法(4种)

方法三、使用commands模块,有三个方法可以使用:

(1)commands.getstatusoutput(cmd),其以字符串的形式返回的是输出结果和状态码,即(status,output)。

(2)commands.getoutput(cmd),返回cmd的输出结果。

(3)commands.getstatus(file),返回ls -l file的执行结果字符串,调用了getoutput,不建议使用此方法

Python调用shell命令常用方法(4种)

Python调用shell命令常用方法(4种)

方法四、subprocess模块,允许创建很多子进程,创建的时候能指定子进程和子进程的输入、输出、错误输出管道,执行后能获取输出结果和执行状态。

(1)subprocess.run():python3.5中新增的函数, 执行指定的命令, 等待命令执行完成后返回一个包含执行结果的CompletedProcess类的实例。

(2)subprocess.call():执行指定的命令, 返回命令执行状态, 功能类似os.system(cmd)。

(3)subprocess.check_call():python2.5中新增的函数, 执行指定的命令, 如果执行成功则返回状态码, 否则抛出异常。

说明:subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, shell=False, timeout=None, check=False, universal_newlines=False)

subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False, timeout=None)

subprocess.check_call(args, *, stdin=None, stdout=None, stderr=None, shell=False, timeout=None)

args:表示shell指令,若以字符串形式给出shell指令,如"ls -l "则需要使shell = Ture。否则默认已数组形式表示shell变量,如"ls","-l"。

当使用比较复杂的shell语句时,可以先使用shlex模块的shlex.split()方法来帮助格式化命令,然后在传递给run()方法或Popen。

Python调用shell命令常用方法(4种)

Python调用shell命令常用方法(4种)

附上python2.7中的subprocess模块源码供理解(pycharm查看方法源码,ctrl+左键)。

# Stubs for subprocess

# Based on http://docs.python.org/2/library/subprocess.html and Python 3 stub

from typing import Sequence, Any, Mapping, Callable, Tuple, IO, Union, Optional, List, Text

_FILE = Union[None, int, IO[Any]]
_TXT = Union[bytes, Text]
_CMD = Union[_TXT, Sequence[_TXT]]
_ENV = Union[Mapping[bytes, _TXT], Mapping[Text, _TXT]]

# Same args as Popen.__init__
def call(args: _CMD,
     bufsize: int = ...,
     executable: _TXT = ...,
     stdin: _FILE = ...,
     stdout: _FILE = ...,
     stderr: _FILE = ...,
     preexec_fn: Callable[[], Any] = ...,
     close_fds: bool = ...,
     shell: bool = ...,
     cwd: _TXT = ...,
     env: _ENV = ...,
     universal_newlines: bool = ...,
     startupinfo: Any = ...,
     creationflags: int = ...) -> int: ...

def check_call(args: _CMD,
        bufsize: int = ...,
        executable: _TXT = ...,
        stdin: _FILE = ...,
        stdout: _FILE = ...,
        stderr: _FILE = ...,
        preexec_fn: Callable[[], Any] = ...,
        close_fds: bool = ...,
        shell: bool = ...,
        cwd: _TXT = ...,
        env: _ENV = ...,
        universal_newlines: bool = ...,
        startupinfo: Any = ...,
        creationflags: int = ...) -> int: ...

# Same args as Popen.__init__ except for stdout
def check_output(args: _CMD,
         bufsize: int = ...,
         executable: _TXT = ...,
         stdin: _FILE = ...,
         stderr: _FILE = ...,
         preexec_fn: Callable[[], Any] = ...,
         close_fds: bool = ...,
         shell: bool = ...,
         cwd: _TXT = ...,
         env: _ENV = ...,
         universal_newlines: bool = ...,
         startupinfo: Any = ...,
         creationflags: int = ...) -> bytes: ...

PIPE = ... # type: int
STDOUT = ... # type: int

class CalledProcessError(Exception):
  returncode = 0
  # morally: _CMD
  cmd = ... # type: Any
  # morally: Optional[bytes]
  output = ... # type: Any

  def __init__(self,
         returncode: int,
         cmd: _CMD,
         output: Optional[bytes] = ...) -> None: ...

class Popen:
  stdin = ... # type: Optional[IO[Any]]
  stdout = ... # type: Optional[IO[Any]]
  stderr = ... # type: Optional[IO[Any]]
  pid = 0
  returncode = 0

  def __init__(self,
         args: _CMD,
         bufsize: int = ...,
         executable: Optional[_TXT] = ...,
         stdin: Optional[_FILE] = ...,
         stdout: Optional[_FILE] = ...,
         stderr: Optional[_FILE] = ...,
         preexec_fn: Optional[Callable[[], Any]] = ...,
         close_fds: bool = ...,
         shell: bool = ...,
         cwd: Optional[_TXT] = ...,
         env: Optional[_ENV] = ...,
         universal_newlines: bool = ...,
         startupinfo: Optional[Any] = ...,
         creationflags: int = ...) -> None: ...

  def poll(self) -> int: ...
  def wait(self) -> int: ...
  # morally: -> Tuple[Optional[bytes], Optional[bytes]]
  def communicate(self, input: Optional[_TXT] = ...) -> Tuple[Any, Any]: ...
  def send_signal(self, signal: int) -> None: ...
  def terminate(self) -> None: ...
  def kill(self) -> None: ...
  def __enter__(self) -> 'Popen': ...
  def __exit__(self, type, value, traceback) -> bool: ...

# Windows-only: STARTUPINFO etc.

STD_INPUT_HANDLE = ... # type: Any
STD_OUTPUT_HANDLE = ... # type: Any
STD_ERROR_HANDLE = ... # type: Any
SW_HIDE = ... # type: Any
STARTF_USESTDHANDLES = ... # type: Any
STARTF_USESHOWWINDOW = ... # type: Any
CREATE_NEW_CONSOLE = ... # type: Any
CREATE_NEW_PROCESS_GROUP = ... # type: Any

shell脚本使用python脚本的参数

写一个hello.sh脚本,需要传入两个参数:

Python调用shell命令常用方法(4种)

执行结果如下:

Python调用shell命令常用方法(4种)

在python脚本中调用shell脚本,并传入参数,注意参数前后要有空格

Python调用shell命令常用方法(4种)

执行python脚本

Python调用shell命令常用方法(4种)

到此这篇关于Python调用shell命令常用方法(4种)的文章就介绍到这了,更多相关Python调用shell命令内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python私有属性和方法实例分析
Jan 15 Python
轻松掌握python设计模式之策略模式
Nov 18 Python
python实现在IDLE中输入多行的方法
Apr 19 Python
Python绘制3D图形
May 03 Python
Python实现判断一行代码是否为注释的方法
May 23 Python
python 按不同维度求和,最值,均值的实例
Jun 28 Python
Python爬虫实现抓取京东店铺信息及下载图片功能示例
Aug 07 Python
pip 安装库比较慢的解决方法(国内镜像)
Oct 06 Python
python使用yaml 管理selenium元素的示例
Dec 01 Python
Python排序函数的使用方法详解
Dec 11 Python
pytorch 中autograd.grad()函数的用法说明
May 12 Python
Python爬虫框架之Scrapy中Spider的用法
Jun 28 Python
python中sort sorted reverse reversed函数的区别说明
May 11 #Python
python的reverse函数翻转结果为None的问题
May 11 #Python
Pyecharts地图显示不完成问题解决方案
May 11 #Python
将python字符串转化成长表达式的函数eval实例
May 11 #Python
python函数中将变量名转换成字符串实例
May 11 #Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
May 11 #Python
基于python实现获取网页图片过程解析
May 11 #Python
You might like
在PHP程序中使用Rust扩展的方法
2015/07/03 PHP
PHP的垃圾回收机制代码实例讲解
2021/02/27 PHP
Javascript 生成指定范围数值随机数
2009/01/09 Javascript
MooTools 1.2中的Drag.Move来实现拖放
2009/09/15 Javascript
js tab效果的实现代码
2009/12/26 Javascript
Javascript中Eval函数的使用
2010/03/23 Javascript
JQuery中判断一个元素下面是否有内容或者有某个标签的判断代码
2012/02/02 Javascript
JavaScript中“基本类型”之争小结
2013/01/03 Javascript
深入了解Node.js中的一些特性
2014/09/25 Javascript
JavaScript 里的类数组对象
2015/04/08 Javascript
JavaScript实现梯形乘法表的方法
2015/04/25 Javascript
Ext JS动态加载JavaScript创建窗体的方法
2016/06/23 Javascript
JS日期对象简单操作(获取当前年份、星期、时间)
2016/10/26 Javascript
微信小程序 Canvas增强组件实例详解及源码分享
2017/01/04 Javascript
AngularJS学习笔记之表单验证功能实例详解
2017/07/06 Javascript
详解vue文件中使用echarts.js的两种方式
2018/10/18 Javascript
Javascript如何递归遍历本地文件夹
2020/08/06 Javascript
python读写ini文件示例(python读写文件)
2014/03/25 Python
利用python模拟实现POST请求提交图片的方法
2017/07/25 Python
Tornado高并发处理方法实例代码
2018/01/15 Python
django启动uwsgi报错的解决方法
2018/04/08 Python
Python生成器定义与简单用法实例分析
2018/04/30 Python
对python使用http、https代理的实例讲解
2018/05/07 Python
Python实现数据结构线性链表(单链表)算法示例
2019/05/04 Python
基于SpringBoot构造器注入循环依赖及解决方式
2020/04/26 Python
使用sklearn对多分类的每个类别进行指标评价操作
2020/06/11 Python
pycharm2020.2 配置使用的方法详解
2020/09/16 Python
Python爬取微信小程序Charles实现过程图解
2020/09/29 Python
使用phonegap检测网络状态的方法
2017/03/30 HTML / CSS
护理专业个人求职简历的自我评价
2013/10/13 职场文书
应聘教师推荐信
2013/10/31 职场文书
《鞋匠的儿子》教学反思
2014/03/02 职场文书
2014小学教师年度考核工作总结
2014/12/03 职场文书
《作风建设永远在路上》心得体会
2016/01/21 职场文书
学习计划是什么
2019/04/30 职场文书
oracle索引总结
2021/09/25 Oracle