Python执行Linux命令

Python执行Linux命令

Python执行Linux命令

在日常工作中,我们经常需要在Python脚本中执行一些Linux命令。这种需求可能是为了自动化任务,也可能是为了在Python环境下调用一些系统级的功能。本文将详细介绍如何在Python中执行Linux命令,并给出一些常见的使用示例。

subprocess模块

在Python中,我们可以使用subprocess模块来执行系统命令。subprocess模块允许我们创建新的进程,连接它们的标准输入、输出和错误管道,以便我们可以与其进行交互。下面是subprocess模块的一些常用函数:

  • subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, shell=False):运行命令并等待它完成,返回一个CompletedProcess对象。

  • subprocess.Popen(args, bufsize=-1, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=True, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0, restore_signals=True, start_new_session=False, pass_fds=(), *, encoding=None, errors=None):执行指定的命令,并返回一个Popen对象,该对象可以用于与进程进行进一步交互。

基本的命令执行

下面是一个简单的示例,演示了如何使用subprocess模块来执行一个简单的Linux命令,并获取其输出:

import subprocess

result = subprocess.run(['ls', '-l'], stdout=subprocess.PIPE)
print(result.stdout.decode('utf-8'))
Python

在这个示例中,我们使用subprocess.run函数来运行ls -l命令,并将其标准输出捕获到stdout变量中。最后我们使用decode方法将字节流解码成字符串,并打印出来。

运行结果类似于以下内容:

total 8
-rw-r--r-- 1 user group 557 Aug 26 09:35 script.py
Python

执行带有参数的命令

有时候我们需要执行的命令需要一些参数,我们可以将命令及其参数作为列表传递给subprocess.run函数。

import subprocess

result = subprocess.run(['grep', 'hello', 'example.txt'], stdout=subprocess.PIPE)
print(result.stdout.decode('utf-8'))
Python

在这个示例中,我们执行的命令是grep hello example.txt,该命令将在文件example.txt中查找包含hello字符串的行。

执行多个命令

有时候我们需要在Python中执行多个命令,可以使用管道符|将多个命令连接起来。下面是一个简单的示例,演示了如何执行多个命令:

import subprocess

result = subprocess.run('ls -l | grep script', shell=True, stdout=subprocess.PIPE)
print(result.stdout.decode('utf-8'))
Python

在这个示例中,我们先使用ls -l列出当前目录下的文件,并将输出传递给grep命令,在其中查找包含script字符串的行。

获取命令的返回值

有时候我们不仅需要执行命令的输出,还需要获取命令的返回值。subprocess.run函数的返回值是一个CompletedProcess对象,其中包含命令执行的返回值。

import subprocess

result = subprocess.run(['ls', 'non_existent_file'], stderr=subprocess.PIPE)
if result.returncode == 0:
    print('Command executed successfully')
else:
    print('Command failed with error:')
    print(result.stderr.decode('utf-8'))
Python

在这个示例中,我们执行了一个不存在的文件non_existent_filels命令,因此命令失败并打印出错误信息。

使用Popen对象交互

如果我们需要与进程进行更多的交互,可以使用subprocess.Popen函数创建一个Popen对象,通过它来进行进一步的操作。

import subprocess

process = subprocess.Popen(['cat'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
output, _ = process.communicate(b'Hello, Linux!\n')
print(output.decode('utf-8'))
Python

在这个示例中,我们创建了一个cat命令的进程,并通过stdin管道向它写入Hello, Linux!\n字符串,并读取其输出。最后我们打印出cat命令的输出。

总结

本文详细介绍了如何在Python中执行Linux命令,通过subprocess模块可以很方便地与系统进行交互。我们可以执行简单的命令,传递参数,运行多个命令以及获取命令的返回值。同时,如果需要更多的交互,可以使用subprocess.Popen创建进程并进行更多的操作。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册