Python调用执行Linux系统命令(四种方法)
Python调用执行Linux系统命令(四种方法)
Python作为一门脚本语言,胶水语言,自然是有它的胶水特性的,就比如Python和Linux系统的结合,比如,在使用Python编写自动化运维脚本的时候,总免不了需要和Linux系统交互,如,查询Linux系统内的某个文件,然后修改这个文件并运行它(假设有可运行权限)。
Python让人称道的其中一个地方就是它的类库非常齐全,这是真的不吹牛,只有你想不到,基本没有它没有的库,比如科学计算库numpy,pandas这些,或者与系统交互的库,os库,或者自动化测试的selenium库等等,到底Python有多少库我想可能Python创始人也可能不知道。(Python的社区太强大了!!!!!)那么,如果Python需要调用Linux系统命令,比如,ls,df,free,ps,这样的命令自然是需要与系统交互的专用库os结合了,还一种方法就是直接操纵进程的啦,那么,自然就是subprocess库啦。也就是说,我们想要Python能够调用Linux系统命令,也就是Python与Linux系统交互,要么需要使用os库,要么需要使用subprocess库啦还有一个不太常用的commands库~~~!!!@~~~~
Python的os模块,见名之意,opera system的意思是毫无疑问了。该模块是Python的内建模块,也可以说是内建库了,该模块内的函数自然也是内建函数了,我们要和系统命令交互,需要使用它的system(),popen()这两个函数,或者使用commands模块,或者使用subprocess模块,前面两个函数和commands模块是比较陈旧的,现在官方比较推荐也可以说强烈推荐的是subprocess模块。
(1) os.system(系统层面的直接调用),这个调用相当直接,且是同步进行的,程序需要阻塞并等待返回。返回值是依赖于系统的,直接返回系统的调用返回值,所以windows和linux是不一样的。
仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息
(2) os.popen(新开线程方式),可以看出,popen方法通过p.read()获取终端输出,而且popen需要关闭close().当执行成功时,close()不返回任何值,失败时,close()返回系统返回值. 可见它获取返回值的方式和os.system不同。
该方法不但执行命令还返回执行后的信息对象,好处在于:将返回的结果赋于一变量,便于程序的处理。
(3) 使用模块 commands( python3失效)
(4) 使用模块 subprocess(Python文档中目前全力推荐),直接调用命令,返回值即是系统返回。shell=True表示命令最终在shell中运行。Python文档中出于安全考虑,不建议使用shell=True。
import os
import commands
print('=============================ls')
os.system('ls -al /')
print('===========df')
df = os.popen('df -ah').read()
print(df)
print('=========================free')
a = commands.getoutput("free -mh")
print(a)
输出结果为:
=============================ls
total 28
dr-xr-xr-x. 17 root root 244 Jan 24 12:11 .
dr-xr-xr-x. 17 root root 244 Jan 24 12:11 ..
-rw-r--r-- 1 root root 0 Jan 24 12:11 .autorelabel
lrwxrwxrwx. 1 root root 7 Jan 24 11:12 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 Jan 24 12:11 boot
drwxr-xr-x 19 root root 3320 Feb 1 09:29 dev
drwxr-xr-x. 138 root root 8192 Feb 1 09:29 etc
drwxr-xr-x. 2 root root 6 Nov 5 2016 home
lrwxrwxrwx. 1 root root 7 Jan 24 11:12 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Jan 24 11:12 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 Nov 5 2016 media
drwxr-xr-x. 3 root root 19 Jan 24 11:34 mnt
drwxr-xr-x. 4 root root 34 Jan 24 11:58 opt
dr-xr-xr-x 229 root root 0 Feb 1 09:29 proc
dr-xr-x---. 11 root root 4096 Feb 1 09:30 root
drwxr-xr-x 39 root root 1200 Feb 1 09:29 run
lrwxrwxrwx. 1 root root 8 Jan 24 11:12 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 Nov 5 2016 srv
dr-xr-xr-x 13 root root 0 Feb 1 09:29 sys
drwxrwxrwt. 21 root root 4096 Feb 1 09:46 tmp
drwxr-xr-x. 13 root root 155 Jan 24 11:12 usr
drwxr-xr-x. 21 root root 4096 Jan 24 11:44 var
===========df
Filesystem Size Used Avail Use% Mounted on
rootfs - - - - /
sysfs 0 0 0 - /sys
proc 0 0 0 - /proc
devtmpfs 1.9G 0 1.9G 0% /dev
securityfs 0 0 0 - /sys/kernel/security
tmpfs 1.9G 0 1.9G 0% /dev/shm
devpts 0 0 0 - /dev/pts
tmpfs 1.9G 9.0M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
cgroup 0 0 0 - /sys/fs/cgroup/systemd
pstore 0 0 0 - /sys/fs/pstore
cgroup 0 0 0 - /sys/fs/cgroup/pids
cgroup 0 0 0 - /sys/fs/cgroup/cpu,cpuacct
cgroup 0 0 0 - /sys/fs/cgroup/net_cls,net_prio
cgroup 0 0 0 - /sys/fs/cgroup/perf_event
cgroup 0 0 0 - /sys/fs/cgroup/freezer
cgroup 0 0 0 - /sys/fs/cgroup/memory
cgroup 0 0 0 - /sys/fs/cgroup/cpuset
cgroup 0 0 0 - /sys/fs/cgroup/hugetlb
cgroup 0 0 0 - /sys/fs/cgroup/blkio
cgroup 0 0 0 - /sys/fs/cgroup/devices
configfs 0 0 0 - /sys/kernel/config
/dev/sda6 70G 4.7G 66G 7% /
systemd-1 - - - - /proc/sys/fs/binfmt_misc
debugfs 0 0 0 - /sys/kernel/debug
mqueue 0 0 0 - /dev/mqueue
hugetlbfs 0 0 0 - /dev/hugepages
nfsd 0 0 0 - /proc/fs/nfsd
/dev/sr0 4.3G 4.3G 0 100% /mnt/cdrom
/dev/sda3 5.0G 33M 5.0G 1% /home
/dev/sda2 20G 164M 20G 1% /var
/dev/sda1 497M 128M 370M 26% /boot
sunrpc 0 0 0 - /var/lib/nfs/rpc_pipefs
tmpfs 378M 4.0K 378M 1% /run/user/0
binfmt_misc 0 0 0 - /proc/sys/fs/binfmt_misc=========================freetotal used free shared buff/cache available
Mem: 3.7G 939M 1.8G 8.9M 1.0G 2.5G
Swap: 4.0G 0B 4.0G
以上是os模块的system方法,popen方法和commands库调用Linux库的方法。后续补充subprocess的调用Linux系统命令的方法。(人在外面没Python环境)
Python调用执行Linux系统命令(四种方法)相关推荐
- Linux开机自动化执行脚本的四种方法(真实案例分享)
Linux开机自动化执行脚本的四种方法(真实案例分享) 最近眼睛有点疼,可能是长时间面对电脑屏幕的原因罢.百度后安装了Redshift这款护眼工具,只要事先写好配置文件它会根据你的地理位置自动调节屏幕 ...
- Java创建并执行线程的四种方法
Java创建并执行线程的四种方法 java里面创建线程有四种方式: 无返回: 实现Runnable接口,重写run(); 继承Thread类,重写run(); 有返回: 实现Callable接口,重写 ...
- python写错了怎么更改-Python中修改字符串的四种方法
在Python中,字符串是不可变类型,即无法直接修改字符串的某一位字符. 因此改变一个字符串的元素需要新建一个新的字符串. 常见的修改方法有以下4种. 方法1:将字符串转换成列表后修改值,然后用joi ...
- python自带的shell是什么-python中执行shell的两种方法总结
一.使用python内置commands模块执行shell commands对Python的os.popen()进行了封装,使用SHELL命令字符串作为其参数,返回命令的结果数据以及命令执行的状态: ...
- python 读写16bit图像的四种方法
python 读写16bit图像的四种方法 应对超高清.HDR等图像增强类深度学习任务和专业图片处理任务时,我们需要对16bit图像进行读取.转tensor和保存等操作,这里总结出四种python实现 ...
- python单向认证_使用Python进行单向方差分析的四种方法
python单向认证 The current post will focus on how to carry out between-subjects ANOVA using Python. As m ...
- 【初学】python执行系统命令四种方法比较
Python中执行系统命令常见的几种方法有 注意:以下实例代码在Python3.5下运行通过. 一.os.system方法 os.system(cmd) 在子终端运行系统命令,可以获取命令执行后的返回 ...
- 在python代码中调用vba宏的四种方法
在python代码中调用vba宏 工作以python为主体,但是遇到了一些word操作的需求(详见上一篇),这个需求用word自带的功能会很容易实现,于是就想着能不能用python调用宏来处理. 网上 ...
- python调用matlab函数_从 Python 调用 MATLAB 函数的三种方法
0. 实验环境Ubuntu 16.04 Matlab R2015b 1. 借助于 mlab 库 安装方法非常简单,只需一行命令 sudo pip install mlab 即可. import num ...
- Python调用剪切板的几种方法
最近在网上搜索Python调用剪切板的方法,得到比较多的说法是调用ctypes包中自带的函数get_clipboard和set_clipboard函数,可是但我动手实现时却发现根本没有这两个函数,于是 ...
最新文章
- 想进入系统CMD?请输入密码
- kubernetes资源控制与及ingress插件安装(容忍策略)
- 在linux上使用yum安装JDK
- Javascript 调用XML制作连动下拉框
- 土地利用转移矩阵图怎么做_肺癌骨转移有哪些早期症状?做什么检查可以发现?怎么治疗?...
- 19.7 主动模式和被动模式 19.8 添加监控主机 19.9 添加自定义模板 19.10 处理图形中的乱码 19.11 自动发现...
- OpenCV辅助对象(help objects)(6)_InputArray和OutputArray
- 嘀嗒出行被曝五一活动虚假宣传,官方回应:为打击黑产
- tia v15 添加项目_基于博途V15 西门子S7-1200 星三角启动实例演示
- WinCE下直接启动自己应用程序的方法
- jzoj3348. 【NOI2013模拟】秘密任务
- java支付系统,三方支付系统,四方支付系统
- win10系统跟Linux系统哪个好,Linux比Windows10系统好吗?Linux vs Win10测试
- 【转载】【常见缺陷分析技术】ODC缺陷分析法
- 红米note3全网通_标注:2015112_官方线刷包_救砖包_解账户锁
- 于树莓派安装Ubuntu系统
- 散列表查找为何如此之快
- 用c语言给8051编程,8051单片机的C语言编程
- 【操作系统 3.了解实模式与保护模式的区别】
- $ 8 : gets函数与puts函数
热门文章
- 服务器内存是用接近完毕
- 树莓派 opencv 调用摄像头
- Linux下OpenCV摄像头录像(c++)
- c语言输出中文为乱码_C语言输出乱码问题
- JDY-31蓝牙模块测试
- Navicat Premium For Mac破解版
- 基于战舰V3的NRF24L01模块的原理剖析及应用
- navicat 8.0 mysql 名、组织、注册码
- cad的dwg文件转html文件,多种方式将CAD文件转化为JPG图片
- python相关性系数显著性检验_线性回归模型中系数趋势显著性的Statsmodels-Wald检验...