当前位置: 首页 > 面试题库 >

python,unittest:有没有办法将命令行选项传递给应用程序

景阳平
2023-03-14
问题内容

我有一个导入unittest并带有一些TestCases的模块。我想接受一些命令行选项(例如,以下是数据文件的名称),但是当我尝试传递该选项时,会收到消息“
option -i not not found”。是否可以让unittest +为应用程序提供选项(注意:我正在使用optparse处理选项)?谢谢。

$ python test_app_data.py -i data_1.txt

option -i not recognized

=====================

后续:这是建议的解决方案的实现:

import cfg_master  #has the optparse option-handling code

...

if __name__ == '__main__':    
    #add you app's options here...
    options_tpl = ('-i', '--in_dir', '-o', '--out_dir')
    del_lst = []
    for i,option in enumerate(sys.argv):
        if option in options_tpl:
            del_lst.append(i)
            del_lst.append(i+1)

    del_lst.reverse()
    for i in del_lst:
        del sys.argv[i]

    unittest.main()

问题答案:

基于Alex的答案,使用argparse以下命令实际上非常容易:

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--input', default='My Input')
    parser.add_argument('filename', default='some_file.txt')
    parser.add_argument('unittest_args', nargs='*')

    args = parser.parse_args()
    # TODO: Go do something with args.input and args.filename

    # Now set the sys.argv to the unittest_args (leaving sys.argv[0] alone)
    sys.argv[1:] = args.unittest_args
    unittest.main()

我还没有测试可以传递给unittest的所有标志,以查看它们是否起作用,但是在中传递测试名称确实可以起作用,例如:

python test.py --input=foo data.txt MyTest

使用foo和运行MyTest data.txt



 类似资料:
  • 问题内容: 特别是,我想做这样的事情: 哦,我想这样做而不必修改pom文件或设置任何环境变量。 问题答案: 我认为最适合您。参见此处:http : //maven.apache.org/configure.html 在Unix中: 添加环境变量以指定JVM属性,例如。此环境变量可用于向Maven提供其他选项。 在Win中,您需要通过对话框设置环境变量 通过打开系统属性()添加…环境变量,…在同一对

  • 问题内容: 我有一个使用处理程序发布可运行实例的线程。它工作得很好,但是我很好奇我如何将参数传递给Runnable实例使用?也许我只是不了解此功能的工作原理。 为了避免出现“您为什么需要此问题”的问题,我有一个线程化的动画,必须调出UI线程来告诉它实际绘制的内容。 问题答案: 只需使用接受参数的构造函数实现的类就可以了, 您可以使用参数化构造函数创建Runnable类的实例。

  • 我在Gradle中使用Spring Boot,我在Intelij中执行此操作: 但我仍然在日志中看到: Tomcat已初始化端口:8080(http) 我已经看到了这一点,但它对我不起作用:https://stackoverflow.com/a/37053004/3871754

  • 我在石英(Spring启动应用程序)有一个cron工作。我已经为调度器、触发器、cron作业和所有其他bean创建了bean。作业的目的是基于指定的cron表达式运行。但是对于作业的每个新执行,我希望传递一些特定于该作业的数据到作业详细对象。但是目前,当我试图在JobDetailFactory bean中传递这样的数据时,它只被创建一次(第一次),对于作业的所有进一步执行,传递的都是相同的陈旧数据

  • 问题内容: 当提供一些参数时,我想使我的python脚本从命令行运行。但是,参数之一应该是特定于脚本一个片段的选项列表。字符串解析是在逗号分隔“命令行列表”字符串之后实际构造列表的唯一方法吗?如果是这样,您将如何处理? 示例:-details = [‘name’,’title’,’address’] 问题答案: 程序: 命令行: 输出: 此代码段将执行短或长命令切换(例如或),并在切换到Pytho

  • “任务”类实例需要包含有关其先决任务的信息。