我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python调用linux系统命令--使

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python调用linux系统命令--使

在python 中调用系统命令,如果使用subprocess.Popen() 模块,按照命令参数的的形式,可以分两种:

  1. 把命令当作字符串传给subprocess.Popen() 

  2. 把命令保存到一个元组,list 的序列,再传给subprocess.Popen() 



subprocess模块使用Popen类创建子进程执行命令,首先subprocess.Popen() 的原型:


subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)


参数说明:

args:  被python执行的命令,一般使用字符串,或者序列(元组或者列表)的形式传入。如果args是一个元组或列表形式,序列的第一个元素就是命令的可执行文件。也可以使用executable 显式地指定可执行文件的路径。


stdin, stdout, stderr :用于和外部进行通信。可以使用 subprcess.PIPE 进行初始化。当stdin, stdout, stderr 被初始化后,就可以和外部进行复杂的通信了。

如:

p = subprocess.Popen() 创建了子进程p 执行命令,外部需要给命令传入参数,则可以用p.communicate(stdin_some)方法,将stdin_some 传入p.stdin 标准输入。

同时p.commucincate() 返回一个tuple 值 (stdout_some,  stderr_some) = p.communicate(stdin_some).所以,调用subprocess.Popen() 创建子进程执行命令,可以很方便地和子进程进行通信,获取状态。

注意:如果需要使用communication() 方法与子进程通信,那么在创建子进程时,stdin, stdout, stderr, 都需要用subprocess.PIPE 初始化。


shell : 默认是False, 如果args 的形式是字符串,那么shell=True, 指定命令是用shell 执行的。如果,args 的形式是一个元组或者list,那么shell=False, 指定不需要在shell 中执行命令。


env : 字典, 用于指定子进程的运行环境,默认是None, 说明子进程继承父进程的环境变量。


subprocess.Popen 的一些方法:


Popen.communicate() :  与外部通信,(out, errout) = Popen.communicate(), 返回标准输出和错误输出。


Popen.poll() : 检查子进程的状态,如果是None 则正在运行,如果是0 则退出,如果是-N 则异常退出。


Popen.wait() : 等待进程结束,并获得返回码。


Popen.pid  : 返回进程pid 号


Popen.kill() : 杀死进程


举例:

1. 以字符串方式传入,shell=True:

wKiom1gDp4-ChGwVAACOO7GVpf4559.png

In [127] 行:创建Popen 对象,Popen 以子进程执行 'ls  -l  .' 命令,列出当前目录的文件,命令的执行结果在标准输出stdout, 因为stdout 用PIPE 初始化了,

所以,在In [129] 行,用p.stdout.read() 将内容读出。   


2. 以序列的方式传入命令,shell=False: 

wKioL1gDqx_DabJPAABth-iAZ-0589.png

用序列的形式保存命令,就不需要指定shell=True 来运行指令了。指令的运行结果也保存在stdout 里,通过readlines() 方法将结果读出。


3. 用communicate() 方法,与指令进行通信:

wKiom1gDrWSxyNoIAAB_CAmyNKs317.png

'ls  -l' 命令的另一个参数路径名,通过communicat('/tmp') 传入,结果通过元组(outstd, outerr) 接收。


4.  多条命令连通:

     在linux 下,经常使用管道将多条命令连在一起,前一条指令的执行结果作为后一条指令的输入,使用Popen 也可以实现。

wKioL1gDr-fCPW7eAABBeaslrTM068.png

首先,查看test.txt 文件的内容。

然后,子进程pb 的标准输入stdin 用pa.stdout 进行初始化,实现了管道的功能,pa 进程的输出编程了pb进程的输入,最后的输出结果。


Python调用linux系统命令--使

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python调用linux系统命令--使

在python 中调用系统命令,如果使用subprocess.Popen() 模块,按照命令参数的的形式,可以分两种:把命令当作字符串传给subprocess.Popen() 把命令保存到一个元组,list 的序列,再传给subproces
2023-01-31

python调用linux系统命令

python3脚本代码如下# !/usr/bin/python# -.- coding: utf-8 -.-__author__ = www.py3study.comimport getpassimport osclass user_and
2023-01-30

Python 之调用系统命令

在python中执行系统命令的方法有以下几种:1.os.system(command)>>> s = os.system('ls -l')总用量 56drwxr-xr-x. 2 root root 4096 4月 16 16:39 do
2023-01-31

python调用系统命令ping

#! /usr/bin/env python#coding=utf-8#############import subprocessimport timeimport osks=int(time.time()) #记录开始时间ip="192.
2023-01-31

python调用调用Linux命令

如何调用Linux命令下面代码演示了调用一个shell命令, 其中,命令的输出会存储到result变量中, 而命令的返回值,则存储到exitcode中,由此可见,调用shell命令还是很方便的:import commandsexitcode
2023-01-31

Linux系统中ps命令和gitps命令的使用

本篇内容介绍了“Linux系统中ps命令和gitps命令的使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!psps [-aAcdefHjl
2023-06-12

Linux系统pwd命令如何使用

这篇文章将为大家详细讲解有关Linux系统pwd命令如何使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。pwd是Print Working Directory的缩写,其功能是显示当前所在工
2023-06-28

Linux系统下find命令的使用

这篇文章主要介绍“Linux系统下find命令的使用”,在日常操作中,相信很多人在Linux系统下find命令的使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux系统下find命令的使用”的疑惑有所
2023-06-16

Linux系统yum命令怎么使用

Linux系统yum命令怎么使用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。yum是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。基於RPM包管
2023-06-28

在Linux系统中使用lsof命令

这篇文章主要讲解了“在Linux系统中使用lsof命令”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“在Linux系统中使用lsof命令”吧!lsof是系统管理/安全的尤伯工具。我大多数时候用
2023-06-13

linux系统如何使用netstat命令

这篇文章主要为大家展示了“linux系统如何使用netstat命令”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“linux系统如何使用netstat命令”这篇文章吧。Netstat 命令用于显示
2023-06-27

linux系统sudo命令如何使用

今天小编给大家分享一下linux系统sudo命令如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
2023-05-25

Linux系统more命令怎么使用

这篇文章跟大家分析一下“Linux系统more命令怎么使用”。内容详细易懂,对“Linux系统more命令怎么使用”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深入学习“Linux系统mo
2023-06-28

Linux系统sed命令怎么使用

这篇文章主要讲解了“Linux系统sed命令怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux系统sed命令怎么使用”吧!我们知道,Vim 采用的是交互式文本编辑模式,你可以用
2023-06-28

Linux系统source命令怎样使用

这期内容当中小编将会给大家带来有关Linux系统source命令怎样使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。source命令是一个内置的shell命令,其主要作用就是在当前bash环境下读取并执
2023-06-28

Python调用系统命令设置超时时间

python通过subprocess模块调用系统命令。实际使用中,有一次是命令进入了交互模式,结果web端直接卡死了。调用时设置一个超时时间,时间用完后自动断开。这样就避免了系统因为调用命令而僵死的问题。def sys_command_ou
2023-01-31

Linux系统下gcc命令使用详解

目录一.预处理二. 编译三.汇编四.链接1.gcc的安装(以Ubuntu为例) sudo apt-get install build-essential 安装完后可以通过 gcc --version 查看版本。 让我们在通过gcc编
2022-06-04

编程热搜

目录