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



我刚刚创建了一个使用argparse解析参数的Python项目。但它似乎不支持多行论证。可以检查项目中的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. 问题出在您的bash脚本中。如果它按预期工作,python甚至不会知道参数之间有换行符——shell会处理并删除换行符。很可能在第一个反斜杠后面有一个空格。

  2. 但是由于相同的文件在Debian上正常工作,但在cygwin下失败,所以在反斜杠后面没有空格。也许是你剧本里的行尾有问题?

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

最新更新