我刚刚创建了使用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
添加对此的支持吗?谢谢。
答案 0 :(得分:1)
事后回答,基于我的评论:
问题出在你的bash脚本中。如果它按预期工作,python甚至不知道参数之间有换行符 - shell处理它并删除换行符。第一次反斜杠后很可能会有一个空格。
但由于同一个文件在Debian上正常工作但在cygwin下失败,因此在反斜杠之后它不是一个空格。也许这是脚本中行结尾的问题?
因此,问题是由CR/LF
自动git
转换,加上cygwin拒绝理解其主机操作系统的行结束约定。虽然您通过手动将脚本转换回unix行结尾来修复它,但我建议使用更强大的解决方案:您可以在cygwin中启用CR / LF支持(因为您暗示它是一个选项),但我的偏好是还禁用git的CR / LF映射。并检查所有常用工具和编辑器是否配置为正确处理两种行结束。