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

Python脚本调用指定函数时出现未知参数错误求助

问题描述

我想运行Python脚本里的_test_one_xml函数,执行命令:

python testfile.py _test_one_xml --password Test123! --username TESTER

但命令行返回错误:

testfile.py: error: unrecognized arguments: _test_one_xml

相关脚本核心结构如下:

def _load_tickets():
    parser = argparse.ArgumentParser(description="Loads tickets to prjABC.")
    parser.add_argument('-p', '--password', help="set password", default='tester!')
    parser.add_argument('-u', '--username', help="set user name", default='tester')
    args = parser.parse_args()
    # ... 后续逻辑

def _test_one_xml(sTestPlan, sTestCase, dicTicket, sState, sContent, sUrlServer, sProjectArea, sUrlProjectArea, username, password):
    # ... 函数逻辑

def _main():
    _load_tickets()

if __name__ == '__main__':
    _main()

问题原因

  1. 脚本默认执行_main(),而_main()只会调用_load_tickets(),没有处理命令行传入的_test_one_xml函数名
  2. 当前argparse只定义了--password和--username两个参数,无法识别_test_one_xml这个额外参数
  3. _test_one_xml需要多个必填参数(测试计划ID、测试用例ID、ticket字典等),直接传函数名也无法提供这些参数

解决方案

方案1:临时调试(快速验证函数)

直接修改脚本的入口逻辑,手动调用_test_one_xml并传入所需参数:

if __name__ == '__main__':
    # 注释原有的_main()调用,替换为手动构造参数
    # _main()
    
    # 替换为实际的测试计划ID和测试用例ID
    test_plan_id = "XXX"
    test_case_id = "YYY"
    
    # 构造函数需要的ticket字典(根据实际需求补充字段)
    dic_ticket = {
        "Tester": "TESTER",
        "Version Major": "1",
        "Version Minor": "0",
        "Version Revision": "0",
        "Version Sideline": "0",
        "PC Name": ""
    }
    
    # 其他必要参数
    state = "com.ibm.prjABC.execution.common.state.passed"
    content = "测试内容"
    url_server = "https://test123.net/resources/"
    project_area = "Project ONE"
    url_project_area = "https://test123.netProjectArea/_aruiy997Fiyr3213fef"
    username = "TESTER"
    password = "Test123!"
    
    # 调用目标函数
    _test_one_xml(test_plan_id, test_case_id, dic_ticket, state, content, url_server, project_area, url_project_area, username, password)

修改后直接执行脚本即可:

python testfile.py

方案2:修改脚本支持命令行指定函数(长期可用)

通过argparse添加子命令,让脚本支持从命令行选择要运行的函数:

  1. 修改_load_tickets()中的参数解析逻辑:
def _load_tickets():
    parser = argparse.ArgumentParser(description="Loads tickets to prjABC.")
    # 添加子命令解析器
    subparsers = parser.add_subparsers(dest="command", required=True)
    
    # 原有的加载票证子命令
    load_parser = subparsers.add_parser("load_tickets", help="加载票证到prjABC")
    load_parser.add_argument('-p', '--password', help="设置密码", default='tester!')
    load_parser.add_argument('-u', '--username', help="设置用户名", default='tester')
    
    # 新增运行_test_one_xml的子命令
    test_xml_parser = subparsers.add_parser("test_one_xml", help="运行_test_one_xml函数")
    test_xml_parser.add_argument('-p', '--password', help="设置密码", default='tester!')
    test_xml_parser.add_argument('-u', '--username', help="设置用户名", default='tester')
    test_xml_parser.add_argument('--test-plan', required=True, help="测试计划ID")
    test_xml_parser.add_argument('--test-case', required=True, help="测试用例ID")
    
    args = parser.parse_args()
    
    # 根据子命令执行对应逻辑
    if args.command == "load_tickets":
        if args.username == '' or args.password == '':
            print('用户名或密码不能为空。')
            sys.exit()
        _load_tickets_from_prjABC_directory(args.username, args.password)
    elif args.command == "test_one_xml":
        # 构造所需参数(可根据需求从命令行补充更多字段)
        dic_ticket = {
            "Tester": args.username,
            "Version Major": "1",
            "Version Minor": "0",
            "Version Revision": "0",
            "Version Sideline": "0",
            "PC Name": ""
        }
        state = "com.ibm.prjABC.execution.common.state.passed"
        content = "测试内容"
        url_server = "https://test123.net/resources/"
        project_area = "Project ONE"
        url_project_area = "https://test123.netProjectArea/_aruiy997Fiyr3213fef"
        
        _test_one_xml(args.test_plan, args.test_case, dic_ticket, state, content, url_server, project_area, url_project_area, args.username, args.password)
  1. 修复_test_one_xml函数的硬编码问题:
def _test_one_xml(sTestPlan, sTestCase, dicTicket, sState, sContent, sUrlServer, sProjectArea, sUrlProjectArea, username, password):
    # 删除这两行硬编码,使用传入的参数
    # username = 'tester'
    # password = 'tester!'
    # ... 剩余逻辑不变

修改后执行命令:

python testfile.py test_one_xml --password Test123! --username TESTER --test-plan "XXX" --test-case "YYY"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 09:57:02