如何从另一个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
相关产品推荐
相关产品推荐

