首页 > 编程语言 >Python: 执行系统命令的四种方法(os.system、os.popen、commands、subprocess)

Python: 执行系统命令的四种方法(os.system、os.popen、commands、subprocess)

时间:2022-10-08 00:34:14浏览次数:88  
标签:commands Python system subprocess popen 返回值 os

一、os.system方法

这个方法是直接调用标准C的system() 函数,仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息。

os.system(cmd)的返回值。如果执行成功,那么会返回0,表示命令执行成功。否则,则是执行错误。

使用os.system返回值是脚本的退出状态码,该方法在调用完shell脚本后,返回一个16位的二进制数,低位为杀死所调用脚本的信号号码,高位为脚本的退出状态码。

os.system()返回值为0        linux命令返回值也为0。

os.system()返回值为256,十六位二进制数示为:00000001,00000000,高八位转成十进制为 1        对应   linux命令返回值 1。

os.system()返回值为512,十六位二进制数示为:00000010,00000000,高八位转成十进制为 2        对应   linux命令返回值 2。

import os
result = os.system('cat /etc/passwd')
print(result)      # 0

二、os.popen方法

os.popen()方法不仅执行命令而且返回执行后的信息对象(常用于需要获取执行命令后的返回信息),是通过一个管道文件将结果返回。通过 os.popen() 返回的是 file read 的对象,对其进行读取 read() 的操作可以看到执行的输出。

import os
result = os.popen('cat /etc/passwd')
print(result.read())

三、commands模块

import commands

status = commands.getstatus('cat /etc/passwd')
print(status)
output = commands.getoutput('cat /etc/passwd')
print(output)
(status, output) = commands.getstatusoutput('cat /etc/passwd')
print(status, output)

四、subprocess模块

Subprocess是一个功能强大的子进程管理模块,是替换os.system ,os.spawn* 等方法的一个模块。

当执行命令的参数或者返回中包含了中文文字,那么建议使用subprocess。

import subprocess
res = subprocess.Popen('cat /etc/passwd', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) # 使用管道
# print res.stdout.read()  # 标准输出
for line in res.stdout.readlines():
    print line
res.stdout.close()         # 关闭

五、总结:

os.system:获取程序执行命令的返回值。

os.popen: 获取程序执行命令的输出结果。

commands:获取返回值和命令的输出结果。

 

参考链接:

Python—执行系统命令的四种方法(os.system、os.popen、commands、subprocess)

Python subprocess模块功能与常见用法实例详解

 

标签:commands,Python,system,subprocess,popen,返回值,os
From: https://www.cnblogs.com/2018shawn/p/16767583.html

相关文章

  • DOSBOX教程
    一、安装dosbox1.新建dosbox文件夹,建议非C盘,如D:\dosbox2.安装DOSBox0.74-win32-installer.exe,选择安装路径为D:\dosbox\DOSBOX-0.74,一直下一步安装完成;安装完成后如下......
  • centos7上单机安装fastdfs6.0.9
    目录1、背景2、fastdfs的一些知识2.1fastdfs的特点2.2架构图2.2.1client介绍2.2.2tracker-server介绍2.2.3storage-server介绍2.3fastdfs需要安装的软件2.4为什......
  • leetcode 106. Construct Binary Tree from Inorder and Postorder Traversal 从中序
    一、题目大意给定两个整数数组inorder和postorder,其中inorder是二叉树的中序遍历,postorder是同一棵树的后序遍历,请你构造并返回这颗二叉树。示例1:输入:ino......
  • Python中的__new__()方法
    1、__new__()至少要有一个参数cls,代表当前类,此参数在实例时由python解释器自动识别,2、__new__()必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别......
  • Python 使用zmail、imapclient或imap_tools接收邮件
    Python中,可以使用通过代码方式接收邮件,本文主要介绍使用zmail、imapclient和imap_tools三种方法接收邮件,以及相关的示例代码。原文地址:Python使用zmail、imapclient或ima......
  • python写脚本测试执行为什么要写if __name__ == '__main__'
    我的博客在写python脚本的时候,例如,我写一个test1.pydeftest(n):print(n)if__name__=='__main__':n=1test(1)接下来打开cmd命令窗口,执行命令python......
  • Python 如何查找特定类型文件(以xls和xlsx为例)
    今天的文章是介绍如何用Python去定位特定类型的文件,会讲到用字符串匹配文件名定位特定文件以及顺带介绍一下遍历目录树的函数,通过今天的这一部分以及之前文章讲到的文件......
  • CentOS部署MySQL
    Linux上安装MySQL第一步:确保服务器在最新的状态(可有可无)[root@chenstudy~]#yum-yupdate第二步:检测系统是否自带安装MySQL我之前安装过MySQL,现在已经卸载了[r......
  • PostCSS真的太好用了!
    在​​PostCSS官网​​有着这样的对PostCSS特性介绍,箭头后面是对应功能的插件及其github地址。increasecodereadability→​​Autoprefixer​​Usetomorrow'sCSS,toda......
  • 在VSCODE的终端运行Python时汉字乱码问题处理
    问题描述在VSCODE的终端运行Python时,打印输出中文时汉字出现乱码,文件编码都是UTF-8解决步骤1、打开Settings配置窗口(Ctrl+,)2、搜索:code-runner.executor如下图所示......