Python 执行 Linux 操作系统命令

发布时间:2025-05-25 00:16:50 作者:益华网络 来源:undefined 浏览量(0) 点赞(0)
摘要:在开发运维脚本过程中,经常需要执行一些操作系统命令,常用方法如下: 1、使用 os.system >>> import os >>> cmd = ls / >>> res =

在开发运维脚本过程中,经常需要执行一些操作系统命令,常用方法如下:

1、使用 os.system

>>> import os

>>> cmd = ls /

>>> res = os.system(cmd)

bin  boot  data  dev  etc  home  lib  lib64  media  mnt  opt  oracle  proc  root  run  sbin  srv  sys  tmp  usr  var

>>> print(res)

0

特点:

(1)Python 内置方法,执行成功返回 0,并在标准输出打印命令执行结果

(2)不能返回命令的运行结果

2、使用 commands.getstatusoutput

>>> import os commands

>>> cmd = ls /

>>> status,output = commands.getstatusoutput(cmd)

status 为命令执行的状态,成功返回 0 ,出错返回非 0 值;

output 是命令的执行结果

特点:

(1)commands 只能在 Python2.x 版本使用,而且并不是每一个 Python2.x 版本 都自带了该模块;

(2)commands 包在 Python3 中已经废弃

3、使用 subprocess.Popen

>>> from subprocess import Popen, PIPE

>>> process = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE)

>>> stdout, stderr = process.communicate()

stdout 为命令执行结果,stderr 为命令错误信息。注意,某些命令即便执行成功,也会有错误提示信息,但不影响结果。

特点:

(1)Python2.x 和 Python3.x 内置模块

(2)可以同时返回命令执行结果和错误信息

(3)可以获取到命令的退出码

综上,推荐使用第三种方法。

一个执行操作系统命令的函数可以封装如下,支持基于互信的远程节点命令执行,返回标注输出、标注错误和退出码

from subprocess import Popen, PIPE

def exec_command(shell_cmd, hostname=None):

    if hostname:

        p = Popen(/usr/bin/ssh -Tq +hostname, shell=True, stdout=PIPE, stdin=PIPE)

        p.stdin.write(str.encode(shell_cmd))

        p.stdin.flush()

    else:

        p = Popen(shell_cmd, shell=True, stdout=PIPE, stdin=PIPE)

    stdout, stderr = p.communicate()

    if stdout:

        stdout = stdout.decode()

    if stderr:

        stderr = stderr.decode()

    return stdout, stderr, p.poll()

二维码

扫一扫,关注我们

声明:本文由【益华网络】编辑上传发布,转载此文章须经作者同意,并请附上出处【益华网络】及本页链接。如内容、图片有任何版权问题,请联系我们进行处理。

感兴趣吗?

欢迎联系我们,我们愿意为您解答任何有关网站疑难问题!

您身边的【网站建设专家】

搜索千万次不如咨询1次

主营项目:网站建设,手机网站,响应式网站,SEO优化,小程序开发,公众号系统,软件开发等

立即咨询 15368564009
在线客服
嘿,我来帮您!