关于python:使用argparse使用换行解析文本

Parse text with newline using argparse

在Python中,使用argparse,有没有办法解析包含作为参数给出的换行符的文本?

我有这个脚本:

1
2
3
4
5
6
7
8
9
10
11
12
#!/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
line2"
])

print(args.text)

按预期打印:

1
2
line1
line2

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

1
2
3
4
$ ./newline2argparse.py"line1
line2"

line1
line2

有什么想法吗?


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

1
2
./newline2argparse.py $'line1
line2'

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


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

1
2
3
4
5
6
$ ./newline2argparse.py"$(echo -en 'line1
line2')"

$ ./newline2argparse.py"$(printf 'line1
line2')"

$ ./newline2argparse.py `printf"line1
line2"
`

有很多选择。