首页 > 系统相关 >Python 执行 Shell命令

Python 执行 Shell命令

时间:2023-05-12 19:46:50浏览次数:43  
标签:Shell Python res cmd subprocess 命令 shell py os

方法一:os.system() 

os.system() 可以说是最为基本的运行 shell 命令的方式了,这个方法的特点就是直接运行命令,并将运行之后的状态值返回码返回,所以结果是一个 int 类型,这个方式比较常见是运用在只需要执行 shell 命令而不需要得到命令的返回结果的场景。

比如执行一个创建目录的操作就可以执行实用这个方法:

vim 3.py
import os

cmd = "mkdir /data/backup/test/hankyoon"
res = os.system(cmd)
print(res)

[root@db-hankyoon scripts]# python3.8 3.py
0

[root@db-hankyoon scripts]# python3.8 3.py
mkdir: cannot create directory ‘/data/backup/test/hankyoon’: File exists
256

方法二:os.popen()
os.popen() 方法执行命令之后会把成功执行的命令的结果以文件的形式返回,所以可以通过 read() 方法获取执行的结果,而如果执行失败,则文件为空,所以这个方法的适用场景是命令返回的结果比较多,需要进行提取结果的场景。

vim 3.py
import os
cmd = "mkdir /data/backup/test/hankyoon && ls /tmp"
res = os.popen(cmd)
print(type(res))
print(res.read())

方法三:commands 模块
commands 模块主要常用的是下面两个方法:

commands.getstatusoutput(cmd) # 返回(状态码, 输出结果)
commands.getoutput(cmd) # 只返回输出结果

这个模块看起来就比较完善了,可以同时得到执行的状态码和输出结果,可以说是同时具备了 os.system() 和 os.popen() 的功能,实用性更强一些。

vim 3.py
import commands
cmd = "cd /data/backup/test && mkdir hankyoon && ls"
res = commands.getstatusoutput(cmd)
print(res)
res = commands.getstatusoutput(cmd)
print(res)

方法四:subprocess 模块
subprocess 模块是官方比较推荐的模块,基本可以取代上面的三种方法,功能也更加强大,可以满足大部分的场景.
subprocess.call() 相当于 os.system() 命令的用法,它执行命令并将执行结果状态码返回。

vim 3.py
import subprocess
cmd = "cd /data/backup/test && mkdir hankyoon && ls"
res = subprocess.call(cmd, shell=True)
print(res)

subprocess 模块里面的方法执行 shell 命令的时候如果传入的命令是字符串的形式,那必须将参数 shell 设置为 True,不然默认就是使用的列表作为命令的传入参数,比如看下面这种不设置 shell=True 和设置的对比:

vim 3.py
import subprocess
res1 = subprocess.call(['ls', '-l'])
-rw-r--r-- 1 root root           65 2023/05/12 19:18:09 3.py

res1 = subprocess.call('ls -l', shell=True)
-rw-r--r-- 1 root root           65 2023/05/12 19:18:09 3.py

当不设置 shell=True 的时候,必须将命令分解成列表传入才能执行.

subprocess.Popen() 方法是我们项目代码中使用的,这个方法同样是可以输出执行的状态码和输出结果,但是参数比 commands 需要的多。

vim 3.py
import subprocess
cmd = "cd /data/backup/test && mkdir hankyoon && ls"
res = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print(res.communicate())

使用 communicate() 方法可以得到执行结果的成功输出和报错输出,如果没有报错则报错为空字符串。

标签:Shell,Python,res,cmd,subprocess,命令,shell,py,os
From: https://www.cnblogs.com/hankyoon/p/17396131.html

相关文章

  • Git常用命令总结
    前言最近将电脑中的许多未提交代码准备整理到Github仓库中,发现许多git命令忘记了,在此记录并复习一下常用的git命令。常用gitinit查看状态gitstatusgitstatus--short暂存修改到缓存区gitadd<file_name>gitadd.提交gitcommit-m<message>gitcommit--......
  • day02 编程语言与Python介绍
    昨日总结回顾第二节编程语言与Python介绍【一】引言基于上一节所学,有了计算机硬件,再在硬件之上安装好操作系统,我们就有了一个应用程序的运行平台,我们接下来的任务就是学习如何使用某款编程语言来开发应用程序。【二】编程语言分类【1】机器语言(1.1)什么是机器语言机器......
  • 水果识别系统python
    介绍水果识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对5种垃圾数据集进行训练,最后得到一个识别精度较高的模型。并基于Django框架,开发网页端操作平台,实现用户上传一张图片识别其名称。效果展示演示视频和源码视频+代码:http......
  • 在python3.7+中优雅的使用dataclass
    [本文出自天外归云的博客园]在Python3.7+中,dataclasses是一个非常优雅的工具,可以轻松地创建简单的类,并自动生成常见的类方法,比如 __init__、__repr__ 等。以下是一些使用dataclasses时需要注意的事项:导入dataclasses模块在使用dataclasses之前,需要先导入datacla......
  • python进阶-虚拟环境
    python两个模块:os:Thismoduleprovidesaportablewayofusingoperatingsystemdependentfunctionality.这个模块提供了一种方便的使用操作系统函数的方法。sys:Thismoduleprovidesaccesstosomevariablesusedormaintainedbytheinterpreterandtofunction......
  • Python 文件大小(Byte)可读性转化(KB、MB、GB、TB)
    Python文件大小可读性转化file_size_exchange.py#!/usr/bin/envpython#-*-coding:utf-8-*-#@Time:2023/5/1217:52#@Software:PyCharm__author__="JentZhang"KB=1024MB=KB*KBGB=MB*KBTB=GB*KBdefformat_byte_repr(byte_num):&q......
  • C/C++思考:命令模式在控制中的应用
    目录意义问题用命令模式解决电机控制与输入信号耦合问题与标准命令模式的区别异同意义先说结论:命令模式能有效对代码模块进行解耦,增强模块的扩展性以及可移植性。问题为了方便说明问题,假设现在有一个电机Motor,在识别到外界信号后,通过软件控制其旋转。需要支持的旋转方式为3种:......
  • 关于Xshell安装出现功能传输错误问题
    Xshell安装时出现致命错误,有关详细信息,请参阅windowsinstallerhelp或者MSDN解决方法:1、在命令行窗口输入regedit打开注册表编辑器2、找到HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control3、将RegistrySizeLimit(REG_SZ类型的)的值改为FFFFFFFF(10进制就是4294967295......
  • Python-单引号、双引号和三引号的作用和区别
    (一)、作用 1.单引号:单引号内部为一串字符(str)。 2.双引号:双引号内部为一串字符,双引号内的字符串可以出现单引号(相当于双引号优先级更高),但不能嵌套双引号。 3.三引号:用于换行输出,且缩进会被打印出来。(三引号还可以用来进行块注释)。(二)、共同点python中变......
  • day02Python的初识
    第二节编程语言与Python介绍【一】引言基于上一节所学,有了计算机硬件,再在硬件之上安装好操作系统,我们就有了一个应用程序的运行平台,我们接下来的任务就是学习如何使用某款编程语言来开发应用程序。【二】编程语言分类【1】机器语言(1.1)什么是机器语言机器语言是站在计算......