如何使用argparse添加对Python脚本的多行参数的支持?

时间:2013-06-07 20:07:31

标签: python command-line-arguments argparse

我刚刚创建了使用argparse来解析参数的a Python project。但它似乎不支持多行参数。可以检查项目中的example/command-line.sh,并发现它不理解以下样式

#!/bin/bash
../scripts_gen.py --template template.txt \
                  --save-to scripts \
                  --param "{'data':'datasets.txt', \
                            'lambda':[`echo 0.{0..9}|sed -E 's/\s+/,/g'`], \
                            'seed':[233,874]}" \
                  --format "{data}_lambda={lambda}_seed={seed}.sh" \
                  --delete

请注意,这在shell脚本中是合法的:可以随时编写

$ ls -l \
> -f
在控制台或shell脚本文件中的

(在这种情况下没有提示)。我可以通过argparse添加对此的支持吗?谢谢。

1 个答案:

答案 0 :(得分:1)

事后回答,基于我的评论:

  1. 问题出在你的bash脚本中。如果它按预期工作,python甚至不知道参数之间有换行符 - shell处理它并删除换行符。第一次反斜杠后很可能会有一个空格。

  2. 但由于同一个文件在Debian上正常工作但在cygwin下失败,因此在反斜杠之后它不是一个空格。也许这是脚本中行结尾的问题?

  3. 因此,问题是由CR/LF自动git转换,加上cygwin拒绝理解其主机操作系统的行结束约定。虽然您通过手动将脚本转换回unix行结尾来修复它,但我建议使用更强大的解决方案:您可以在cygwin中启用CR / LF支持(因为您暗示它是一个选项),但我的偏好是还禁用git的CR / LF映射。并检查所有常用工具和编辑器是否配置为正确处理两种行结束。