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

举例说明:

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

import os

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

print val

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

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

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

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

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

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

方法四、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。

附上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脚本,并传入参数,注意参数前后要有空格

执行python脚本

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

python调用shell命令-Python调用shell命令常用方法(4种)相关推荐

  1. python调用shell命令-python调用shell命令小结

    在写python脚本的时候,经常需要调用系统命令,常用的python调用系统命令的方法主要有subprocess.call和os.popen.默认情况下subprocess.call的方法结果是返回值 ...

  2. Python语言学习:利用python语言实现调用内部命令(python调用Shell脚本)—命令提示符cmd的几种方法

    Python语言学习:利用python语言实现调用内部命令(python调用Shell脚本)-命令提示符cmd的几种方法 目录 利用python语言实现调用内部命令-命令提示符cmd的几种方法 T1. ...

  3. python 执行shell_用Python调用Shell命令

    Python经常被称作"胶水语言",因为它能够轻易地操作其他程序,轻易地包装使用其他语言编写的库,也当然可以用Python调用Shell命令. 用Python调用Shell命令有如 ...

  4. python调用adb shell命令_如何在python脚本里面连续执行adb shell后面的各种命令

    如何在python脚本里面连续执行adb shell后面的各种命令 adb shell "cd /data/local && mkdir tmp" adb shel ...

  5. 在beeline中执行Linux命令,python - 从python脚本执行beeline命令时出现“找不到beeline命令”错误(从oozie shell操作调用) - 堆栈内存溢出...

    我有一个要使用oozie计划的python脚本. 我正在使用Oozie shell动作来调用脚本. 脚本中有一条直线指令. 运行oozie工作流程时,出现错误" sh:beeline:命令未 ...

  6. python调用php命令行,python调用php函数 python怎样调用php文件中的函数详解

    前言 python调用php代码实现思路:php文件可通过在terminal中使用php命令行进行调用,因此可使用python开启子进程执行命令行代码.函数所需的参数可通过命令行传递. 测试环境 1. ...

  7. python 调用linux命令-Python 执行Linux系统命令的N种方法

    前言: 很多时候我们会用到python去调用外部工具/命令去实现某种功能. I. os https://docs.python.org/2/library/os.html os.system 执行流程 ...

  8. python调用shell该引用到什么类_python调用shell, shell 引用python

    标签: python 调用 shell get_line_num="wc -l as_uniq_info | awk '{print $1}'" ###get the lines ...

  9. python调用cmd执行命令_python调用命令行,其中包含“echo”和“|”

    参见英文答案 > piping in shell via Python subprocess module 4个 我试着用python调用命令行执行一些文件.但是,当有一个包含"ech ...

最新文章

  1. 2020牛客暑期多校训练营(第三场)
  2. 新闻文本内容知识图谱表示项目
  3. 精讲23种设计模式-基于装饰模式~设计多级缓存框架
  4. 视觉SLAM十四讲学习笔记-第三讲-相似、仿射、射影变换和eigen程序、可视化演示
  5. 你用Deepfakes给小电影换个脸,人脸识别AI也看不出来:95%萌混过关
  6. 和谐: OρenVΡN的UDP握手协议
  7. 【转】Java杂谈(四)
  8. UEFI中的Protocol
  9. Unregistering application *** with eureka with status DOWN
  10. 微信授权扫码点餐-新特性React16
  11. python pandas合并_python学习:pandas学习笔记(四)合并
  12. Xamarin for android学习总结一
  13. 2022年(23届)电子信息/通信工程保研|四非上岸浙大的保研之旅(浙大、中科大、哈工大、东南、南开、西电、成电等)
  14. 分布式计算、云计算与大数据
  15. 小程序中wxss设置渐变色背景的方法
  16. 快速理解数据库函数依赖(平凡函数依赖、非平凡函数依赖、完全函数依赖、部分函数依赖、传递依赖)
  17. windows系统电脑间互传文件
  18. 思科配置VLAN间单臂路由
  19. mac的终端显示分支名称?mac的终端和idea中的terminal同时修改
  20. 06、SQL执行时间抖动

热门文章

  1. access字段属性设置下拉列表_可嵌入您系统的.NET 报表控件ActiveReports:带状列表组件...
  2. 开发日记-20190422 关键词 插件化(1)概述
  3. 示廓灯——也就是前后位置等开启方法 还有该死的刮水器是长这样的
  4. Cython的简单使用
  5. tflearn alexnet iter 10
  6. elasticsearch date_histogram
  7. kafka备份机制——zk选举leader,leader在broker里负责备份
  8. linux查看网卡速度
  9. linux系统格式化磁盘
  10. 微软.net一些类的源码