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

如何在Python同文件内使用argparse传递自定义参数?

如何在Python同文件内使用argparse传递自定义参数?

嘿,我一眼就看出问题所在啦——你给main函数传了自定义参数,但你的argparse完全没接住!默认情况下parser.parse_args()会自动读取命令行里的sys.argv[1:],你手动传给main的['--data_dir', 'data/non']根本没被它用到,所以才一直输出默认值data/text。

给你推荐最实用的解决办法,还能轻松支持多参数:

核心思路:让argparse接收你传入的参数列表

修改你的main函数,让它可以接收一个可选的参数列表参数,然后把这个列表传给parse_args()。这样既支持命令行直接运行脚本,也支持在文件内手动调用main传自定义参数,一举两得。

完整示例代码:

import argparse

def main(args_list=None):
    parser = argparse.ArgumentParser()
    # 定义第一个参数
    parser.add_argument("--data_dir", default='data/text', type=str,
                        help="The input data dir. Should contain the .tsv files (or other data files) for the task.")
    # 再加一个参数示例,演示多参数支持
    parser.add_argument("--batch_size", default=32, type=int,
                        help="Batch size for processing data.")
    
    # 关键:如果传入了自定义参数列表就用它,否则用默认的命令行参数
    args = parser.parse_args(args_list)
    print(f"data_dir: {args.data_dir}")
    print(f"batch_size: {args.batch_size}")
    return args

if __name__ == "__main__":
    # 场景1:命令行运行脚本时,直接调用main(),会自动读取终端传入的参数
    # 比如终端输入:python your_script.py --data_dir data/test --batch_size 16
    # main()

    # 场景2:文件内手动调用,传入自定义参数列表
    results = main(['--data_dir', 'data/non', '--batch_size', '64'])

运行这段代码,你会看到输出的data_dir是data/non,batch_size是64,完全符合你的预期。

补充:另一种不推荐的方法(修改sys.argv)

如果你不想改动main函数的结构,也可以手动修改sys.argv来欺骗argparse,不过这种方法不够灵活,代码可读性也差,只做个补充参考:

import argparse
import sys

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("--data_dir", default='data/text', type=str,
                        help="The input data dir. Should contain the .tsv files (or other data files) for the task.")
    args = parser.parse_args()
    print(args.data_dir)

if __name__ == "__main__":
    # 手动替换sys.argv,让argparse读取我们指定的参数
    sys.argv = ['dummy_name.py', '--data_dir', 'data/non']
    main()

还是强烈推荐第一种方法,后续加新参数只需要在add_argument里加一行,调用时传对应的参数就行,非常方便。

备注:内容来源于stack exchange,提问作者Lunaria

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 09:40:27