将所有剩余参数传递给鼻子的烧瓶脚本命令?
Flask-Script command that passes all remaining args to nose?
我使用一个简单的命令 运行 我的鼻子测试:
@manager.command
def test():
"""Run unit tests."""
import nose
nose.main(argv=[''])
然而,nose 支持许多我现在无法通过的有用参数。
有没有办法 运行 nose 使用 manager 命令(类似于上面的调用)并且仍然能够将参数传递给 nose?例如:
python manage.py test --nose-arg1 --nose-arg2
现在我从 Manager
得到一个错误,即 --nose-arg1 --nose-arg2
不被识别为有效参数。我想将这些参数作为 nose.main(argv= <<< args comming after python manage.py test ... >>>)
传递
在 flask_script
的源代码中,您可以看到当执行的 Command
将属性 capture_all_args
设置为 True
时,"too many arguments"
错误被阻止了这在任何地方都没有记录。
您可以在 class 上设置该属性,就在 运行 经理
之前
if __name__ == "__main__":
from flask.ext.script import Command
Command.capture_all_args = True
manager.run()
像这样给经理的附加参数总是被接受的。
此快速修复的缺点是您无法再以正常方式向命令注册选项或参数。
如果您仍然需要该功能,您可以子class Manager
并像这样覆盖 command
装饰器
class MyManager(Manager):
def command(self, capture_all=False):
def decorator(func):
command = Command(func)
command.capture_all_args = capture_all
self.add_command(func.__name__, command)
return func
return decorator
然后你可以像这样使用command
装饰器
@manager.command(True) # capture all arguments
def use_all(*args):
print("args:", args[0])
@manager.command() # normal way of registering arguments
def normal(name):
print("name", name)
请注意,出于某种原因 flask_script
要求 use_all
接受可变参数,但会将参数列表存储在 args[0]
中,这有点奇怪。 def use_all(args):
不工作并失败 TypeError "got multiple values for argument 'args'"
Flask-Script 有一个未记录的 capture_all_flags
flag, which will pass remaining args to the Command.run
method. This is demonstrated in the tests。
@manager.add_command
class NoseCommand(Command):
name = 'test'
capture_all_args = True
def run(self, remaining):
nose.main(argv=remaining)
python manage.py test --nose-arg1 --nose-arg2
# will call nose.main(argv=['--nose-arg1', '--nose-arg2'])
运行 遇到 davidism 的 soln 问题,其中只收到了一些参数
仔细查看文档,记录了 nose.main 自动获取 stdin
http://nose.readthedocs.io/en/latest/api/core.html
所以我们现在只使用:
@manager.add_command
class NoseCommand(Command):
name = 'nose'
capture_all_args = True
def run(self, remaining):
nose.main()
我使用一个简单的命令 运行 我的鼻子测试:
@manager.command
def test():
"""Run unit tests."""
import nose
nose.main(argv=[''])
然而,nose 支持许多我现在无法通过的有用参数。
有没有办法 运行 nose 使用 manager 命令(类似于上面的调用)并且仍然能够将参数传递给 nose?例如:
python manage.py test --nose-arg1 --nose-arg2
现在我从 Manager
得到一个错误,即 --nose-arg1 --nose-arg2
不被识别为有效参数。我想将这些参数作为 nose.main(argv= <<< args comming after python manage.py test ... >>>)
在 flask_script
的源代码中,您可以看到当执行的 Command
将属性 capture_all_args
设置为 True
时,"too many arguments"
错误被阻止了这在任何地方都没有记录。
您可以在 class 上设置该属性,就在 运行 经理
之前if __name__ == "__main__":
from flask.ext.script import Command
Command.capture_all_args = True
manager.run()
像这样给经理的附加参数总是被接受的。
此快速修复的缺点是您无法再以正常方式向命令注册选项或参数。
如果您仍然需要该功能,您可以子class Manager
并像这样覆盖 command
装饰器
class MyManager(Manager):
def command(self, capture_all=False):
def decorator(func):
command = Command(func)
command.capture_all_args = capture_all
self.add_command(func.__name__, command)
return func
return decorator
然后你可以像这样使用command
装饰器
@manager.command(True) # capture all arguments
def use_all(*args):
print("args:", args[0])
@manager.command() # normal way of registering arguments
def normal(name):
print("name", name)
请注意,出于某种原因 flask_script
要求 use_all
接受可变参数,但会将参数列表存储在 args[0]
中,这有点奇怪。 def use_all(args):
不工作并失败 TypeError "got multiple values for argument 'args'"
Flask-Script 有一个未记录的 capture_all_flags
flag, which will pass remaining args to the Command.run
method. This is demonstrated in the tests。
@manager.add_command
class NoseCommand(Command):
name = 'test'
capture_all_args = True
def run(self, remaining):
nose.main(argv=remaining)
python manage.py test --nose-arg1 --nose-arg2
# will call nose.main(argv=['--nose-arg1', '--nose-arg2'])
运行 遇到 davidism 的 soln 问题,其中只收到了一些参数
仔细查看文档,记录了 nose.main 自动获取 stdin
http://nose.readthedocs.io/en/latest/api/core.html
所以我们现在只使用:
@manager.add_command
class NoseCommand(Command):
name = 'nose'
capture_all_args = True
def run(self, remaining):
nose.main()