我在Python 3.6中使用argparse.我使用可选参数来收集我的程序参数.对于其中一些,我有合理的默认值,因此我使用该参数的默认值配置解析器.
In [2]: import argparse
...: import shlex
...:
...: parser = argparse.ArgumentParser()
...: parser.add_argument('-s', '--samples', action='store', nargs='+', type=int, required=True,
...: help='number of samples')
...: parser.add_argument('-r', '--regions', action='append', nargs='+', type=str, default=['all'],
...: help='one or more region names. default to [\'all\']')
Run Code Online (Sandbox Code Playgroud)
当没有指定-r/ - regions参数时,我希望看到配置的默认值(我这样做).
In [3]: s = '-s 37'
...: parser.parse_args(shlex.split(s))
Out[3]: Namespace(regions=['all'], samples=[37])
Run Code Online (Sandbox Code Playgroud)
在指定-r/ - regions参数时,我希望只看到我为参数提供的值,但默认情况也会显示.
In [5]: s = '-s 37 -r foo'
...: parser.parse_args(shlex.split(s))
Out[5]: Namespace(regions=['all', ['foo']], samples=[37])
Run Code Online (Sandbox Code Playgroud)
这不是我的预期.我希望只有在不存在可选参数时才会出现默认值.我逐步完成了argparse代码.我找不到包含默认值的位置.根据注释,似乎逻辑是在处理提供的实际参数值之前 …
我正在尝试使用 EMR w/ Spark 在 AWS 中启动一个集群。我有一个 bash 引导脚本来安装一些 python 包、下载凭据并应用一些配置。引导操作在主设备上成功,但在从设备上失败。唯一的错误提示是“i-######:启动失败。引导操作 2 失败,退出代码为非零”。紧接其前面的消息是“i-######:引导操作 1 已完成”。(在这两种情况下都指从属设备的实例 ID。主设备还报告引导操作 1 成功)。
因此,引导操作 2 中执行的最后一个命令似乎有错误,并导致引导脚本返回非零退出代码。但是,我只配置了一个 bootstrap action。非主节点是否自动运行另一个引导操作?
没有日志显示实际错误是什么。我查看了 S3 上的引导日志(无法可靠显示),并尝试在启动期间跟踪从站和主站上的 /var/log/bootstrap-actions/ 日志。
我很确定错误不在我的脚本中(每个开发人员都说......)。我能够创建一个无引导的普通 EMR 集群,然后在等待时登录并以 hadoop 用户身份运行我的引导脚本,没有错误。我还查看了最后几个命令(grep 和 echo)并验证它们不会返回非零退出,也不会导致脚本返回非零退出代码。
我认为问题一定出在一些神秘的第二次引导操作中。是这样吗?我如何确定错误?
更新我在启动期间登录到从属节点。我在 中找到了引导操作/emr/instance-controller/lib/bootstrap-actions。只有 1 个子文件夹,其中包含我的引导脚本。我然后就跑了
tail -f /emr/instance-controller/log/instance-controller.log。我验证了我的脚本已启动。经过大约 15 个状态检查周期(15 分钟)后,我明白了
2017-06-02 13:44:30,173 INFO InstanceConfigurer: Script 1 - Execution succeeded
Run Code Online (Sandbox Code Playgroud)
然后我看到另一个 AWS 脚本启动,这似乎是失败的一个。
2017-06-02 13:44:30,181 INFO InstanceConfigurer: Running provision-node, with id 5aed1c54-4210-4387-944a-4fdbbce6dc8d
2017-06-02 13:44:30,188 INFO InstanceConfigurer: Script 5aed1c54-4210-4387-944a-4fdbbce6dc8d - Fetching …Run Code Online (Sandbox Code Playgroud)