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命令,并获取其输出:
在这个示例中,我们使用subprocess.run
函数来运行ls -l
命令,并将其标准输出捕获到stdout
变量中。最后我们使用decode
方法将字节流解码成字符串,并打印出来。
运行结果类似于以下内容:
执行带有参数的命令
有时候我们需要执行的命令需要一些参数,我们可以将命令及其参数作为列表传递给subprocess.run
函数。
在这个示例中,我们执行的命令是grep hello example.txt
,该命令将在文件example.txt
中查找包含hello
字符串的行。
执行多个命令
有时候我们需要在Python中执行多个命令,可以使用管道符|
将多个命令连接起来。下面是一个简单的示例,演示了如何执行多个命令:
在这个示例中,我们先使用ls -l
列出当前目录下的文件,并将输出传递给grep
命令,在其中查找包含script
字符串的行。
获取命令的返回值
有时候我们不仅需要执行命令的输出,还需要获取命令的返回值。subprocess.run
函数的返回值是一个CompletedProcess
对象,其中包含命令执行的返回值。
在这个示例中,我们执行了一个不存在的文件non_existent_file
的ls
命令,因此命令失败并打印出错误信息。
使用Popen对象交互
如果我们需要与进程进行更多的交互,可以使用subprocess.Popen
函数创建一个Popen对象,通过它来进行进一步的操作。
在这个示例中,我们创建了一个cat
命令的进程,并通过stdin
管道向它写入Hello, Linux!\n
字符串,并读取其输出。最后我们打印出cat
命令的输出。
总结
本文详细介绍了如何在Python中执行Linux命令,通过subprocess模块可以很方便地与系统进行交互。我们可以执行简单的命令,传递参数,运行多个命令以及获取命令的返回值。同时,如果需要更多的交互,可以使用subprocess.Popen
创建进程并进行更多的操作。