Python中执行系统命令的三种方法详解

温以宁
温以宁
发布时间:2026-10-14 | 4人浏览过
原创

本文详细介绍在Python中执行系统命令的三种常用方法:os.system、os.popen以及subprocess模块。重点分析各方法的返回值机制、阻塞特性及代码获取输出的最佳实践,帮助开发者根据实际需求选择合适的方式调用外部程序。

1、使用os.system()方法

通过os.system函数可以执行cmd指令,其输出结果会直接打印在控制台。该函数返回值为0时,表示命令执行成功。

示例代码:


# coding:utf-8

import os

os.system("ls")

需要注意的是,PS:os.system()这种方式虽然简单直接,但无法捕获cmd命令执行后的具体输出内容。

此外,PPS:os.system()函数在调用shell脚本后,返回一个16位的二进制数值。其中,低位字节代表杀死所调用脚本的信号号码,高位字节则代表脚本的退出状态码。例如,当脚本中执行“exit 1”后,os.system函数返回值的高位数为1;若低位数为0,则函数返回值为0x0100,换算为十进制即为256。

2、使用os.popen()方法

os.popen()函数用于从一个命令打开一个管道。该方法在Unix和Windows系统中均有效。os.popen函数返回的是一个file对象,其操作方式与使用open()打开文件类似。

popen()方法的语法格式如下:


os.popen(command[, mode[, bufsize]])


参数说明:


command – 使用的命令。
mode – 模式权限可以是 ‘r'(默认) 或 ‘w'。
bufsize – 指明了文件需要的缓冲大小:0意味着无缓冲;1意味着行缓冲;其它正值表示使用参数大小的缓冲(大概值,以字节为单位)。负的bufsize意味着使用系统的默认值,一般来说,对于tty设备,它是行缓冲;对于其它文件,它是全缓冲。如果没有改参数,使用系统的默认值。


示例代码:


# coding:utf-8

import os

# popen返回文件对象,同open操作一样
f = os.popen(r"ls", "r")

l = f.read()
print(l)
f.close()

对于返回值是文件对象的情况,推荐使用以下处理方式:


with os.popen(cmd, "r") as p:
    r = p.read()


使用上述推荐写法,无需显式调用p.close()来关闭文件。

注意:os.popen()方法是非阻塞的。

3、使用subprocess.Popen()

自python2.4版本起,Python提供了subprocess模块来创建子进程。该模块允许连接到子进程的标准输入、输出和错误流,并能获取子进程的返回值。

subprocess.Popen()的定义如下:


class 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)


此处不再赘述其各个参数的具体含义,以下是一段简单的示例代码:


# coding:utf-8

import subprocess

p = subprocess.Popen("ls", shell=True, stdout=subprocess.PIPE)
r = p.stdout.read()
print(r)

注意:subprocess模块提供了两种调用子程序的方法。subprocess.call()是阻塞式的,而subprocess.Popen()是非阻塞的。

到此这篇关于在Python中执行cmd的文章就介绍到这了,更多相关Python中执行cmd内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表