【问题标题】:Parse text with newline using argparse使用 argparse 用换行符解析文本
【发布时间】:2018-06-01 11:07:18
【问题描述】:

在 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

对此有什么想法吗?

【问题讨论】:

  • 您的 shell 不会将 \n 解释为换行符。你用的是那个 bash 吗?
  • which $SHELL 打印出/bin/bash。我在 Mac OS 上。但是应该有办法在python脚本中处理这个问题?
  • 根据this answer可以使用./newline2argparse.py $'line1\nline2'

标签: python python-3.x argparse


【解决方案1】:

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

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

有很多选择。

【讨论】:

  • 接受了这个答案,因为它似乎在 shell 中更“通用”,但@Barmar 的答案对于bash 来说更简洁。
【解决方案2】:

如果您想在 shell 字符串中处理转义序列,请用 $'' 包围它

./newline2argparse.py $'line1\nline2'

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

【讨论】:

    猜你喜欢
    • 2021-07-25
    • 2021-07-24
    • 2013-09-13
    • 1970-01-01
    • 2013-02-07
    • 2018-12-14
    相关资源
    最近更新 更多