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

运行py.test -sv B/时如何读取自定义命令行参数并写入文件

问题原因分析

  • 第一次报错:你在conftest.py顶层直接调用标准库argparse解析命令行参数,会和pytest自身的参数解析体系冲突,pytest识别不了你自定义的--val参数,你自己声明的argparse也会把pytest自带的-sv、B/等参数判定为非法输入,因此报参数不识别错误。另外你的代码存在笔误,把a_file.close()写成了a.file.close(),也会触发运行错误。
  • 第二次报错:pytest_addoption钩子传入的parser是pytest自定义的参数解析对象,不是标准库argparse.ArgumentParser的实例,不存在add_argument方法,添加自定义参数需要用pytest专属的addoption方法,同时参数解析是pytest内部完成的,不能在pytest_addoption中手动调用解析方法。

正确解决方法

你可以通过pytest官方提供的两个钩子配合实现需求:先用pytest_addoption注册自定义命令行参数,再用pytest_configure钩子在配置加载完成后获取参数值写入文件。

修正后的conftest.py代码

def pytest_addoption(parser):
    # 注册自定义命令行参数
    parser.addoption(
        "--val",
        action="store",
        default="",
        help="需要写入文件的自定义参数值"
    )
    # 保留你之前定义的--name参数
    parser.addoption("--name", action="store", default="default name")


def pytest_configure(config):
    # 从pytest配置中获取传入的--val参数值
    input_val = config.getoption("--val")
    if input_val:
        # 用with上下文管理器自动处理文件关闭,避免笔误
        with open("file_val", "w", encoding="utf-8") as f:
            f.write(input_val)
        print(f"参数值已写入file_val文件:{input_val}")

执行命令

py.test -sv B/ --val=Hello

运行后即可在当前目录生成内容为Hello的file_val文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 23:54:05