开放的编程资料库

当前位置:我爱分享网 > Python教程 > 正文

Python 执行命令

Pythonexec教程展示了如何在Python中执行shell命令和程序。

在Python中,有几种方法可以执行shell命令或程序。我们可以使用os模块或subprocess模块。

subprocess模块拥有最强大的命令执行工具。

带有os.system的Pythonexec命令

os.system是一个用于执行程序的简单工具。

#!/usr/bin/python

import os

os.system('firefox')

该示例启动firefox。

带有os.popen的Pythonexec命令

os.popen允许我们接收来自已执行命令的输入。它打开一条通往或来自命令的管道。返回值是一个连接到管道的打开的文件对象,可以根据模式是’r’(默认)还是’w’来读取或写入。

#!/usr/bin/python

import os

output = os.popen('ls -la').read()
print(output)

在示例中,我们读取了ls命令的输出并将其打印到控制台。

$ ./read_output.py 
total 28
drwxr-xr-x   2 janbodnar janbodnar 4096 Oct 11 14:30 .
drwxr-xr-x 113 janbodnar janbodnar 4096 Oct 11 13:35 ..
-rwxr-xr-x   1 janbodnar janbodnar  202 Oct 11 14:02 listing.py
-rwxr-xr-x   1 janbodnar janbodnar  218 Oct 11 13:54 node_version.py
-rwxr-xr-x   1 janbodnar janbodnar  547 Oct 11 14:04 pinging.py
-rwxr-xr-x   1 janbodnar janbodnar   78 Oct 11 13:39 read_output.py
-rwxr-xr-x   1 janbodnar janbodnar   50 Oct 11 13:37 simple.py

这是一个示例输出。

带有子进程的Pythonexec命令

子进程模块允许我们生成新进程,连接到它们的输入/输出/错误管道,并获取它们的返回码。该模块旨在替换几个较旧的模块和功能。

#!/usr/bin/python

import subprocess
 
output = subprocess.run(['node', '--version'], text=True, capture_output=True)
 
print(f'Node version:  {output.stdout.strip()}')

该示例使用subprocess模块获取Node的版本。

output = subprocess.run(['node', '--version'], text=True, capture_output=True)

run执行命令,等待命令完成,并返回一个CompletedProcess实例。为了将输出捕获到标准输出和标准错误输出,我们将capture_output设置为true。默认情况下,输出以字节字符串形式返回。通过将text选项设置为True,我们得到一个普通的字符串。

$ ./node_version.py 
Node version:  v12.18.4

这是一个示例输出。

带有子进程的Python列表内容

在下面的示例中,我们列出了用户主目录的内容。

#!/usr/bin/python

import subprocess
from pathlib import Path

output = subprocess.Popen(['ls', '-l', Path.home()], text=True,
    stdout=subprocess.PIPE)

stdout, _ = output.communicate()
print(stdout)

此模块中的底层进程创建和管理由Popen类处理。它提供了比便利功能更多的灵活性。

stdout, _ = output.communicate()

我们使用communicate方法与进程交互。它将数据发送到stdin并从stdout和stderr读取数据,直到到达EOF。

在本教程中,我们执行了shell命令和程序。

列出所有Python教程。

未经允许不得转载:我爱分享网 » Python 执行命令

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏