1

我刚刚创建了一个用于解析参数的 Python 项目。argparse但它似乎不支持多行参数。可以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吗?谢谢你。

4

1 回答 1

1

根据我的评论,事后回答:

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

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

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

于 2013-06-08T22:34:32.217 回答