Python 关于使用结构时的argparse
我是python&fabric的新手。 我有一个python模块module1.py,它想要接受一个命令参数,我们在module1.py中使用argparse来需要一个命令行参数。 但是我们试图通过fabric运行整个程序,如果我在运行fab时直接指定命令行,我得到Python 关于使用结构时的argparse,python,fabric,argparse,Python,Fabric,Argparse,我是python&fabric的新手。 我有一个python模块module1.py,它想要接受一个命令参数,我们在module1.py中使用argparse来需要一个命令行参数。 但是我们试图通过fabric运行整个程序,如果我在运行fab时直接指定命令行,我得到 mycode.py: error: argument --config_yaml is required 我怎样才能通过fab来传递这个论点 谢谢 我知道argparse,但不知道fabric。从错误中可以看出,您的脚本似乎定义了
mycode.py: error: argument --config_yaml is required
我怎样才能通过fab来传递这个论点
谢谢 我知道
argparse
,但不知道fabric
。从错误中可以看出,您的脚本似乎定义了一个“--config_yaml”argparse
参数(并将其设置为“必需”)。但是fabric
显然也使用了这个参数名
我不知道fabric
是否也使用argparse
。但是,像这样的程序通常会去掉它所期望的命令行参数,并将其余参数传递给代码
是否需要在脚本中使用--config_yaml
?为什么设置为required=True
argparse
允许您指定required
参数,但理想情况下,这样标记的参数是可选的。如果没有,他们应该有一个合理的违约
我在
fabric
API中看到一个--config=…
参数,但没有看到--config\u yaml
我想知道关于每个任务参数的这一部分是否相关
听起来您需要将任务名称添加到参数中
fabric
不只是将所有未知参数传递给任务(这是我在上面假设的)。但是我没有安装fabric
,因此无法测试它。从这里可以看到:
你不能这么做。在运行main.py之前,您不能向env_options
添加内容,而fabfile.py
中的代码将在处理main()
之后运行
但是,您可以执行以下操作:
重命名fabfile.py
->任何您想要的,只要它不是fabric.py
。我打电话给我的fabricc.py
from fabric.state import env_options, make_option
env_options.append(make_option('--myconfig', dest='config_file', default='default.ini'))
from fabric import main
from fabric.api import task, env
@task
def do_something():
print('config file: {}'.format(env.config_file))
if __name__ == '__main__':
main.find_fabfile = lambda x: __file__
main.main()
现在运行它:
$ python fabricc.py do_something
config file: default.ini
Done.
或者
警告不要调用它--config
--这是一个内置参数
有了它,你仍然可以享受你仍然热爱的面料
的一切,而且一切都没有改变
$ python fabricc.py do_something --help
Usage: fab [options] <command>[:arg1,arg2=val2,host=foo,hosts='h1;h2',...] ...
Options:
-h, --help show this help message and exit
-d NAME, --display=NAME
...
-z INT, --pool-size=INT
number of concurrent processes to use in parallel mode
--myconfig=CONFIG_FILE
这就是织物被创造出来的目的
它的意思是这样使用:
@task
def environment(box_env=None):
...
@task
def deploy(branch='master'):
...
@task
def provision(recreate_if_existing=False, start_nignx=True):
...
fab evironment:dev deploy:development
fab evironment:dev provision:True,False
全部加在一起
fab evironment:dev provision deploy:development
为什么这个问题被标记为torando?在任何情况下,这都是由于fab(我不熟悉)没有将命令行参数传递到
module1.py
,而不是在结构下使用python或argparse
,如果我指定--config_yaml,它将抱怨无法识别此标志:(fabric doc链接是否相关?我认为这不是真的,该文件中提到的参数应该在任务级别指定。但我认为Module1.py可以被其他文件重用,它应该能够接受自己的参数(无论在哪个程序中使用)听起来我们都在猜测fabric
如何调用您的代码。
@task
def environment(box_env=None):
...
@task
def deploy(branch='master'):
...
@task
def provision(recreate_if_existing=False, start_nignx=True):
...
fab evironment:dev deploy:development
fab evironment:dev provision:True,False
fab evironment:dev provision deploy:development