Извиняюсь, если об этом спрашивали раньше, я искал его, но все совпадения, похоже, касались необработанных строк python в целом, а не argparse.
В любом случае, у меня есть код, в котором пользователь вводит строку, а затем эта строка обрабатывается. Однако у меня есть проблема, так как я хочу, чтобы мой код мог различать \n
и \\n
, чтобы пользователь мог контролировать, получают ли они разрыв строки или \n
в выводе (соответственно).
Это само по себе довольно просто, и я могу заставить работать логику для проверки строки и т. д. Однако argparse, похоже, не сохраняет исходную строку ввода. Итак, если бы я написал: Here is a list:\nItem 1
, он будет проанализирован как Here is a list:\\nItem 1
. Поскольку точно такая же вещь анализируется, если я заменю \n
на \\n
во входной строке, становится невозможно различать их.
Я мог бы включить bodge (например, я мог бы заставить пользователя ввести $\n
, чтобы \n
появилось в выводе, или просто \n
для разрыва строки). Но это беспорядочно и усложняет использование кода.
Есть ли способ убедиться, что строка, анализируемая argparse, является необработанной? (То есть, если я ввожу \n
, он анализирует \n
, а не \\n
)
Опять же, извините, если об этом спрашивали раньше, но я не смог найти ответ, и после более чем часа попыток найти ответ у меня закончились идеи (за исключением бреда). Заранее приветствую любую помощь.
Пример кода (извините, если это не работает, не знаю, как лучше сделать пример кода для argparse!):
import argparse
parser = argparse.ArgumentParser( description = 'Test.' )
parser.add_argument( 'text', action = 'store', type = str, help = 'The text to parse.' )
args = parser.parse_args( )
print( repr( args.text ) )
argparse
может только анализировать аргументы командной строки, переданные процессу Python, но не может изменять способ обработки этих аргументов оболочкой. И какой-то побег может или может сейчас произойти там, например.python -c "import sys; print sys.argv" My\nMagic\nString
печатает другое значение вcmd.exe
Windows и другое значение вbash
, даже если в приглашении мы набираем те же символы. - person Łukasz Rogalski   schedule 24.08.2016