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监控网卡流量并使用graphite绘图的示例
Apr 27 Python
跟老齐学Python之有点简约的元组
Sep 24 Python
Python中最常用的操作列表的几种方法归纳
Apr 24 Python
python 中random模块的常用方法总结
Jul 08 Python
python 文件查找及内容匹配方法
Oct 25 Python
对python内置map和six.moves.map的区别详解
Dec 19 Python
Python实现DDos攻击实例详解
Feb 02 Python
Python Web框架之Django框架Form组件用法详解
Aug 16 Python
Python如何把多个PDF文件合并代码实例
Feb 13 Python
Python定时任务框架APScheduler原理及常用代码
Oct 05 Python
如何解决python多种版本冲突问题
Oct 13 Python
python xlwt模块的使用解析
Apr 13 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 str_replace的替换漏洞
2008/03/15 PHP
PHP加密解密实例分析
2015/12/25 PHP
YII2 实现多语言配置的方法分享
2017/01/11 PHP
Ecshop 后台添加新功能栏目及管理权限设置教程
2017/11/21 PHP
PHP操作Redis常用命令的实例详解
2020/12/23 PHP
jquery库文件略庞大用纯js替换jquery的方法
2014/08/12 Javascript
基于jQuery实现交互体验社会化分享代码附源码下载
2016/01/04 Javascript
JavaScript学习笔记之ES6数组方法
2016/03/25 Javascript
JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】
2016/05/10 Javascript
前端设计师们最常用的JS代码汇总
2016/09/25 Javascript
JavaScript基于replace+正则实现ES6的字符串模版功能
2017/04/25 Javascript
vue子组件使用自定义事件向父组件传递数据
2017/05/27 Javascript
angular bootstrap timepicker TypeError提示怎么办
2017/06/13 Javascript
Vue-Router2.X多种路由实现方式总结
2018/02/09 Javascript
加快Vue项目的开发速度的方法
2018/12/12 Javascript
深入理解使用Vue实现Context-Menu的思考与总结
2019/03/09 Javascript
JS正则表达式验证端口范围(0-65535)
2020/01/06 Javascript
基于Ionic3实现选项卡切换并重新加载echarts
2020/09/24 Javascript
[56:46]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 VP vs Effect
2018/04/01 DOTA
python hook监听事件详解
2018/10/25 Python
python读取目录下最新的文件夹方法
2018/12/24 Python
Apache,wsgi,django 程序部署配置方法详解
2019/07/01 Python
Django 外键的使用方法详解
2019/07/19 Python
Python实现的企业粉丝抽奖功能示例
2019/07/26 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
2019/08/06 Python
有趣的Python图片制作之如何用QQ好友头像拼接出里昂
2020/04/22 Python
解决pip install psycopg2出错问题
2020/07/09 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
2020/07/13 Python
使用python操作lmdb对数据读取的实例
2020/12/11 Python
鞋子女王塔玛拉·梅隆同名奢侈品牌:Tamara Mellon
2017/11/22 全球购物
大学生求职简历的自我评价范文
2013/10/12 职场文书
培训主管的岗位职责
2013/11/23 职场文书
大学自我鉴定
2013/12/20 职场文书
小学三八妇女节活动方案
2014/03/16 职场文书
超市仓管员岗位职责
2014/04/07 职场文书
先进事迹材料范文
2014/12/29 职场文书