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教程。