如何在 Python 中执行外部命令 ?

B站影视 2025-01-25 15:13 3

摘要:Python 是一种强大的编程语言,可以帮助自动执行许多任务,包括在 Linux 系统上运行命令。在本指南的最后,您将能够使用 Python 轻松有效地执行 Linux 命令。

Python 中执行外部命令

Python 是一种强大的编程语言,可以帮助自动执行许多任务,包括在 Linux 系统上运行命令。在本指南的最后,您将能够使用 Python 轻松有效地执行 Linux 命令。

os 模块是 Python 标准库的一部分,它提供了一种使用操作系统相关功能的方法。

运行 Linux 命令的最简单方法之一是使用 os.system 模块。

import os# Running a simple commandos.system("ls -l")

os.system 易于使用,但不建议用于更复杂的任务,因为它不太灵活,不能直接捕获命令的输出。

subprocess 模块是 Python 中在运行系统命令更强大的替代方案。它允许您产生新的过程,连接到它们的输入/输出/错误管道,并获取其返回代码。

Python 3.5 引入了 run 函数,这是推荐的方法,因为它更通用。

import subprocess# Running a command and capturing its outputcompleted_process = subprocess.run(["ls", "-l"], capture_output=True, text=True)# Accessing the outputprint(completed_process.stdout)# Checking the return codeif completed_process.returncode != 0:print("The command failed with return code", completed_process.returncode)

对于与 subprocesses 更复杂的交互,使用 Popen

import subprocess# Starting a processprocess = subprocess.Popen(["ls", "-l"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)# Communicating with the processstdout, stderr = process.communicate# Printing the outputprint(stdout)# Checking if the process had an errorif process.returncode != 0:print("Error:", stderr)

如上面的示例所示,捕获命令的输出通常是必不可少的。subprocess.runsubprocess.Popen 方法提供了 stdoutstderr 参数,分别用于捕获命令的标准输出和标准错误。

有时,您可能希望执行带有多个命令的 shell 管道。这可以通过将 shell=True 传递给 subprocess.runsubprocess.Popen 方法。

import subprocess# Running a shell pipelinecompleted_process = subprocess.run("grep 'some_text' some_file.txt | wc -l",shell=True,capture_output=True,text=True)# Printing the outputprint(completed_process.stdout.strip)

请谨慎使用 shell=True,特别是在使用用户生成的输入时,因为它更容易受到 shell 注入攻击。

当从 Python 执行 Linux 命令时,处理潜在的错误非常重要,例如非零退出码或异常。

import subprocesstry:completed_process = subprocess.run(["ls", "-l", "/non/existent/directory"], check=True, text=True)except subprocess.CalledProcessError as e:print(f"The command '{e.cmd}' failed with return code {e.returncode}")

酷瓜云课堂 - 开源在线教育解决方案

来源:鸠摩智首席音效师

相关推荐