Python 调用 Python 脚本并传参

在 Python 中,我们经常会需要调用其他的 Python 脚本,并且往往还需要传递一些参数给被调用的脚本。这个过程非常简单,只需要几行代码就可以完成。

为什么要调用其他的 Python 脚本?

在开发过程中,我们通常会将一些重复使用的功能封装成一个单独的 Python 脚本,然后在需要使用这些功能的地方进行调用。这样可以提高代码的重用性和可维护性。

例如,我们可以将一些常用的数据处理函数封装成一个独立的脚本,然后在不同的项目中进行调用。这样可以避免每个项目都重复实现相同的功能,提高开发效率。

如何调用其他的 Python 脚本?

要调用其他的 Python 脚本,我们可以使用 Python 的 subprocess 模块。这个模块允许我们在一个独立的进程中执行外部命令或者脚本,并能够获取到执行的结果。

下面是一个简单的示例,演示如何调用一个 Python 脚本并传递参数:

import subprocess

# 定义被调用的脚本路径
script_path = "path/to/script.py"

# 定义传递给被调用脚本的参数
args = ["arg1", "arg2", "arg3"]

# 使用 subprocess 模块调用脚本
result = subprocess.run(["python", script_path] + args, capture_output=True, text=True)

# 输出调用结果
print(result.stdout)

在上面的示例中,我们首先导入了 subprocess 模块。然后,我们定义了被调用的 Python 脚本的路径 script_path,以及要传递给脚本的参数 args

接下来,我们使用 subprocess.run() 函数调用脚本。该函数接受一个包含命令及参数的列表作为参数,以及一些可选的参数。

在这个例子中,我们使用 capture_output=True 参数来捕获被调用脚本的输出,并使用 text=True 参数将输出转换为文本格式。最后,我们通过 result.stdout 输出调用结果。

一个实际的示例

下面我们以一个实际的示例来演示如何调用其他的 Python 脚本并传递参数。

假设我们有两个 Python 脚本,一个用于计算圆的面积,另一个用于计算圆的周长。我们将这两个脚本分别保存为 area.pycircumference.py

area.py 的代码如下:

import math

def calculate_area(radius):
    return math.pi * radius**2

if __name__ == "__main__":
    import sys
    radius = float(sys.argv[1])
    area = calculate_area(radius)
    print(f"The area of the circle is: {area}")

circumference.py 的代码如下:

import math

def calculate_circumference(radius):
    return 2 * math.pi * radius

if __name__ == "__main__":
    import sys
    radius = float(sys.argv[1])
    circumference = calculate_circumference(radius)
    print(f"The circumference of the circle is: {circumference}")

现在,我们可以在另一个脚本中调用这两个脚本,并传递参数给它们。我们将这个脚本保存为 main.py,代码如下:

import subprocess

# 定义被调用的脚本路径
area_script = "path/to/area.py"
circumference_script = "path/to/circumference.py"

# 定义传递给被调用脚本的参数
radius = 5

# 调用计算圆面积的脚本
result_area = subprocess.run(["python", area_script, str(radius)], capture_output=True, text=True)
area = float(result_area.stdout)

# 调用计算圆周长的脚本
result_circumference = subprocess.run(["python", circumference_script, str(radius)], capture_output=True, text=True)
circumference = float(result_circumference.stdout)

#