You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从另一个Python文件调用返回列表的Python文件?

如何从另一个Python文件调用返回列表的Python脚本

首先看你的File1代码,它的核心逻辑是读取配置文件生成列表,但目前main函数没有返回这个列表,而且依赖sys.argv获取参数,直接调用会不太方便。咱们先调整下File1的代码,让它既可以单独作为脚本运行,也能被其他文件轻松调用:

#!/usr/bin/python
import sys
import os
# 兼容Python2和Python3的配置模块差异
try:
    import configparser
except ImportError:
    import ConfigParser as configparser
import re

def get_config_values(keys):
    """从配置文件获取指定key的列表"""
    pFilepath = "/tmp/system.conf"
    values = []
    if not os.path.isfile(pFilepath):
        print(f"File path {pFilepath} does not exist. Exiting...")
        sys.exit(1)
    
    config = configparser.RawConfigParser()
    config.read(pFilepath)
    
    for key in keys:
        parts = re.split('[:]', key)
        try:
            values.append(config.get(parts[0], parts[1]))
        except Exception as e:
            print(f"{parts[1]} 读取失败: {str(e)}")
    return values

def main(argv):
    # 保留命令行调用的兼容性
    if not argv:
        print("请传入配置项参数,格式如 section:key")
        sys.exit(1)
    values = get_config_values(argv)
    print(values)
    return values

if __name__ == "__main__":
    main(sys.argv[1:])

修改说明:

  • 把核心逻辑抽成了get_config_values函数,接收参数列表并返回结果列表,这是让其他文件能直接调用的关键。
  • 兼容了Python2和Python3的配置模块差异,避免版本适配问题。
  • 替换了裸except为具体异常捕获,同时保留错误提示,调试起来更清晰。
  • 保留了原有的命令行调用能力,File1依然可以单独运行。

现在看怎么从其他文件调用:

方法1:直接import调用(推荐)

假设你的调用文件是File2.py,和File1.py在同一个目录下,直接import后调用get_config_values即可:

# File2.py
import File1

# 传入你需要的配置项,格式是 ["section:key1", "section:key2"]
my_configs = File1.get_config_values(["db:host", "db:port", "app:debug"])
print("拿到的配置列表:", my_configs)

这种方式最直接,性能高,而且能直接拿到列表对象,不需要额外解析。

方法2:通过subprocess调用(不推荐,仅作备选)

如果实在不想修改File1,可以用subprocess模块调用它的命令行形式,然后捕获输出解析成列表:

# File2.py
import subprocess
import ast

# 调用File1并传入参数
proc = subprocess.run(
    ["python", "File1.py", "db:host", "db:port"],
    capture_output=True,
    text=True
)

if proc.returncode == 0:
    # 把命令行输出的字符串转成列表
    my_configs = ast.literal_eval(proc.stdout.strip())
    print("拿到的配置列表:", my_configs)
else:
    print("调用出错:", proc.stderr.strip())

这种方式依赖File1的输出格式,如果File1里的print内容变了,解析就会失效,所以优先用方法1。

内容的提问来源于stack exchange,提问作者Suriya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:42:34