使用 argparse 解析带有换行符的文本

Parse text with newline using argparse

在 Python 中,使用 argparse,有什么方法可以解析包含作为参数给定的换行符的文本吗?

我有这个脚本:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import argparse

parser = argparse.ArgumentParser(formatter_class=argparse.RawTextHelpFormatter)
parser.add_argument('text', help='some text with newline')

args = parser.parse_args(["line1\nline2"])

print(args.text)

按预期打印:

line1
line2

但如果我在命令行中给出参数(在上面的脚本中更改为 args = parser.parse_args() 之后),它不会做同样的事情。例如:

$ ./newline2argparse.py "line1\nline2"
line1\nline2

对此有什么想法吗?

您的 \n 被视为 \ 后跟 n,而不是应有的解释。使用 echoprintf 之类的命令来正确解释它。这几乎适用于任何 shell(shbashzsh 等)。

$ ./newline2argparse.py "$(echo -en 'line1\nline2')"
$ ./newline2argparse.py "$(printf 'line1\nline2')"
$ ./newline2argparse.py `printf "line1\nline2"`

有很多选择。

如果要在 shell 字符串中处理转义序列,请用 $''

将其包围
./newline2argparse.py $'line1\nline2'

请注意,这是一个 bash 扩展,所有其他 shell 可能不支持它。