Разбор текста с новой строки, используя argparse - PullRequest
0 голосов
/ 01 июня 2018

В 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

Есть идеи на этот счет?

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Если вы хотите, чтобы escape-последовательности обрабатывались в строке оболочки, окружите ее $''

./newline2argparse.py $'line1\nline2'

Обратите внимание, что это расширение bash, оно может поддерживаться не всеми другими оболочками..

0 голосов
/ 01 июня 2018

Ваш \n принимается за \, за которым следует n, и не интерпретируется как следует.Используйте команду типа echo или printf, чтобы правильно ее интерпретировать.Это должно работать практически на любой оболочке (sh, bash, zsh и т. Д.).

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

Существует множество альтернатив.

...