小编Dig*_*oug的帖子

为什么argparse包含可选参数的默认值,即使指定了参数?

我在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代码.我找不到包含默认值的位置.根据注释,似乎逻辑是处理提供的实际参数值之前 …

python argparse

6
推荐指数
1
解决办法
1714
查看次数

引导操作成功后,节点配置程序中的 EMR 从属引导失败

我正在尝试使用 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)

python bash amazon-web-services emr apache-spark

6
推荐指数
2
解决办法
7474
查看次数

标签 统计

python ×2

amazon-web-services ×1

apache-spark ×1

argparse ×1

bash ×1

emr ×1