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 dict 字典 以及 赋值 引用的一些实例(详解)
Jan 20 Python
python列表的增删改查实例代码
Jan 30 Python
在CMD命令行中运行python脚本的方法
May 12 Python
使用Python调取任意数字资产钱包余额功能
Aug 15 Python
python序列化与数据持久化实例详解
Dec 20 Python
Python线程条件变量Condition原理解析
Jan 20 Python
使用opencv识别图像红色区域,并输出红色区域中心点坐标
Jun 02 Python
python 元组的使用方法
Jun 09 Python
pyCharm 实现关闭代码检查
Jun 09 Python
Python字符串split及rsplit方法原理详解
Jun 29 Python
最简单的matplotlib安装教程(小白)
Jul 28 Python
Python爬虫:从m3u8文件里提取小视频的正确操作
May 14 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提取中文首字母
2008/04/09 PHP
php中的观察者模式
2010/03/24 PHP
PHP7+Nginx的配置与安装教程详解
2016/05/10 PHP
PHP弱类型的安全问题详细总结
2016/09/25 PHP
php nginx 实时输出的简单实现方法
2018/01/21 PHP
Yii2框架操作数据库的方法分析【以mysql为例】
2019/05/27 PHP
PHP rsa加密解密算法原理解析
2020/12/09 PHP
IE中jquery.form中ajax提交没反应解决方法分享
2012/09/11 Javascript
javascript为下拉列表动态添加数据项
2014/05/23 Javascript
javascript自定义的addClass()方法
2014/05/28 Javascript
js实现拖拽功能
2017/03/01 Javascript
深入理解JavaScript继承的多种方式和优缺点
2017/05/12 Javascript
深入理解vue-router之keep-alive
2017/08/31 Javascript
JSON生成Form表单的方法示例
2018/11/21 Javascript
Selenium执行Javascript脚本参数及返回值过程详解
2020/04/01 Javascript
JavaScript随机数的组合问题案例分析
2020/05/16 Javascript
Vue2.x和Vue3.x的双向绑定原理详解
2020/11/05 Javascript
Vue 3.0中jsx语法的使用
2020/11/13 Javascript
[01:03:36]Ti4 循环赛第三日DK vs Titan
2014/07/12 DOTA
Python3基础之list列表实例解析
2014/08/13 Python
Python设计模式中单例模式的实现及在Tornado中的应用
2016/03/02 Python
Python实现购物程序思路及代码
2017/07/24 Python
Python使用cx_Oracle调用Oracle存储过程的方法示例
2017/10/07 Python
python版简单工厂模式
2017/10/16 Python
Python网络编程之TCP与UDP协议套接字用法示例
2018/02/02 Python
pytorch构建网络模型的4种方法
2018/04/13 Python
在Python中调用Ping命令,批量IP的方法
2019/01/26 Python
python3.4+pycharm 环境安装及使用方法
2019/06/13 Python
Python 没有main函数的原因
2020/07/10 Python
AmazeUI底部导航栏与分享按钮的示例代码
2020/08/18 HTML / CSS
文秘人员工作职责
2014/01/31 职场文书
2014年教师节演讲稿
2014/09/03 职场文书
优秀党员学习焦裕禄精神思想汇报范文
2014/09/10 职场文书
独生子女证明范本
2015/06/19 职场文书
个人工作决心书
2015/09/22 职场文书
MySQL 如何设计统计数据表
2021/06/15 MySQL