📅  最后修改于: 2023-12-03 15:19:12.040000             🧑  作者: Mango
有时候在Python程序中需要执行一些外部命令或者调用其他的脚本来完成一些功能。这时候我们可以使用Python的内置模块subprocess来运行子进程并获取输出。
subprocess模块允许Python程序生成新的进程并与它们进行交互。它可以用来代替os.system和os.spawn系列函数。subprocess模块提供了更多选择来调用和控制进程,以及更安全的操作。
下面是subprocess模块的一些常见函数:
subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)
subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, universal_newlines=False)
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)
subprocess.call
函数可以启动一个新的子进程并等待其终止。它可以传递任何的命令行参数,并且能够在子进程执行期间获取它的标准输入、标准输出和标准错误流。
下面是一个输出当前目录列表的示例:
import subprocess
result = subprocess.call(["ls", "-l"])
print(result)
输出:
总用量 24
-rw-r--r-- 1 user staff 250 3 2 11:28 README.md
-rw-r--r-- 1 user staff 498 12 30 2020 main.py
-rw-r--r-- 1 user staff 239 3 8 20:28 test.py
0
subprocess.check_output
函数执行给定的命令,然后将标准输出作为字节字符串返回。
下面是一个输出当前目录列表的示例:
import subprocess
result = subprocess.check_output(["ls", "-l"])
print(result)
输出:
b'total 24\n-rw-r--r-- 1 user staff 250 3 2 11:28 README.md\n-rw-r--r-- 1 user staff 498 12 30 2020 main.py\n-rw-r--r-- 1 user staff 239 3 8 20:28 test.py\n'
subprocess.Popen
函数可以启动一个新的子进程,并在新的进程中执行指定的命令。它可以传递任何的命令行参数,并且能够在子进程执行期间获取它的标准输入、标准输出和标准错误流。
下面是一个输出当前目录列表的示例:
import subprocess
p = subprocess.Popen(["ls", "-l"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate()
print(out.decode())
输出:
总用量 24
-rw-r--r-- 1 user staff 250 3 2 11:28 README.md
-rw-r--r-- 1 user staff 498 12 30 2020 main.py
-rw-r--r-- 1 user staff 239 3 8 20:28 test.py
stdout=subprocess.PIPE
和stderr=subprocess.PIPE
,可以把Popen对象的标准输出和标准错误流储存到变量中。p.communicate()
函数会等待子进程的结束,同时获取标准输出和标准错误流的内容。subprocess模块提供了三种运行子进程并获取输出的函数。使用这些函数,我们可以轻松地执行外部程序并从它们的标准输出和标准错误流中获取数据。注意,执外部命令是和操作系统相关的,不同的操作系统之间可能会有不同的命令和命令行参数。