Python2.7的argparse为您提供了两个扩展点,您可以在其中控制命令行参数的解析方式:类型函数和操作类。从内置类型和Action来看,最佳实践似乎是类型函数应该包含验证/初始化代码,而Action应该关注将值存储到命名空间中。这种方法的问题是当您的类型检查代码有副作用时。考虑这个简单的例子:fromargparseimportArgumentParser,FileTypeargp=ArgumentParser()argp.add_argument('-o',type=FileType('w'),default='myprog.out')argp.parse_args(['-o
我的项目需要的所有鸡蛋都预先下载在一个目录中,我希望安装工具仅从该目录安装包。在我的setup.cfg中我有:[easy_install]allow_hosts=Nonefind_links=../../setup我运行pythonsetup.pydevelop,它找到并正确安装了所有包。为了测试,我有一个额外的要求,在setup.py中指定。tests_require=["pinocchio==0.2"],这个蛋也驻留在本地../../setup目录中。我运行pythonsetup.pytest,它看到依赖关系并在../../setup中找到egg就好了。但是,egg会安装到我的cu
我有一个包含setup.py文件的项目。我使用pytest作为测试框架,我还在我的代码上运行各种linters(pep8、pylint、pydocstyle、pyflakes等)。我使用tox在多个Python版本中运行它们,并使用Sphinx构建文档。我想使用pythonsetup.pytest任务在我的源代码上运行我的测试套件和linter。如果我实现了这一点,我将只使用pythonsetup.pytest作为在我的tox.ini文件中运行测试的命令。所以我的问题是:使用pythonsetup.pytest执行这些操作是否合理/良好的做法?或者我应该为此使用一些其他工具,比如直接在
在进行MiguelGrinberg的FlaskWeb开发时,我在测试gravatar代码时卡住了,deftest_gravatar(self):u=User(email='john@example.com',password='cat')withself.app.test_request_context('/'):gravatar=u.gravatar()gravatar_256=u.gravatar(size=256)gravatar_pg=u.gravatar(rating='pg')gravatar_retro=u.gravatar(default='retro')withsel
我想使用argparse来构建一个带有子命令的工具。可能的语法是/tool.pydownload--from1234--interval60/tool.pydownload--build1432/tool.pyclean--numbers10所以我想用argparse来实现:确保“--from”和“--interval”始终一起使用确保“--build”永远不会与其他参数一起使用但我没有找到将“--from”和“--internal”配对到一个组,然后使该组与“--build”互斥的方法。下面是我当前的代码,它只使“--from”和“--build”互斥。既不能确保“--from”和“
我正在尝试使用py.test的fixtures在我的单元测试中,结合unittest。我在项目顶层的conftest.py文件中放置了几个固定装置(如here所述),用@pytest.fixture装饰它们,并且将它们的名称作为参数传递给需要它们的测试函数。灯具正确注册,如py.test--fixturestest_stuff.py所示,但是当我运行py.test时,我得到NameError:未定义全局名称“my_fixture”。这似乎只发生在我使用unittest.TestCase的子类时——但是py.test文档似乎说它与unittest配合得很好.当我使用unittest.Te
我需要在Python中动态创建参数列表。我创建了一个脚本来演示这一点,名为args.py,如下所示:#!/usr/bin/pythonimportargparseparser=argparse.ArgumentParser()parser.add_argument('-args_file',default='args.txt')withopen(parser.parse_args().args_file,'r')asf:args=f.readlines()forarginargs:parser.add_argument('-'+arg.strip())dynamic_args=pars
我的目标是使用argparse编写一个Python命令行实用程序,该实用程序具有多个命令,每个命令都有不同的所需输入集。我尝试通读文档、一些Google搜索和堆栈溢出,但找不到任何内容。我可以想到一些可能的解决方案,但它们很难看,需要手动处理帮助文档和验证。我怀疑这是一种常见的、有效的解决方案已经广为人知的问题,我只是缺少合适的术语来搜索它,或者它有点晦涩难懂以至于没有张贴在很多地方。我现在最好的想法是拥有一个位置参数,并且根据该输入的值以某种方式对一组附加参数有不同的要求。也许我会解析两次?举个例子,这是一个类似的案例:有一个位置参数,动物动物选项有猫、蜥蜴、鱼对于猫来说,爪子、mu
我有一堆Python脚本,它们使用通用代码读取不同类型的输入和写入输出文件。这些是化学结构文件。一些示例文件类型是.smi或.sdf。默认情况下,我希望其中一些脚本以“smi”文件格式输出数据,而其他脚本以“sdf”格式输出数据。是否可以覆盖从父解析器继承的参数的默认值?例如……#InheritedcodefilesParser=argparse.ArgumentParser(add_help=False)filesParser.add_argument('-o',dest='outformat',default="smi")#Scriptcodeparser=argparse.Arg
是否可以访问传递给参数的选择元组?如果是这样,我该怎么做例如如果我有parser=argparse.ArgumentParser(description='chooselocation')parser.add_argument("--location",choices=('here','there','anywhere'))args=parser.parse_args()我可以访问元组('here','there','anywhere')吗? 最佳答案 事实证明,parser.add_argument实际上返回了关联的Action。