如果这个问题之前已经被问过,我很抱歉,但我确实搜索了一下,所有的结果似乎都是关于python中原始字符串的一般性讨论而不涉及argparse。
无论如何,我有一个代码,用户输入一个字符串然后这个字符串会被处理。然而,我的问题是我想让我的代码能够区分\n
和\\n
,以便用户可以控制是否在输出中得到一个换行或者\n
(分别)。
这本身相当简单,我可以让逻辑工作来检查字符串等。但是,argparse似乎不会保留输入字符串的原始状态。所以,如果我写:Here is a list:\nItem 1
,它会被解析为Here is a list:\\nItem 1
。由于在输入字符串中用\n
替换\\n
时解析出完全相同的内容,因此无法区分两者之间的差异。
我可以包含一个修补程序(例如,我可以让用户输入$\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进程的命令行参数,但它无法修改这些参数被shell如何处理。而且,在那里可能会发生一些转义,例如,即使在提示符中键入相同的字符,python -c "import sys; print sys.argv" My\nMagic\nString
在Windows的cmd.exe
和bash
中打印出不同的值。 - Łukasz Rogalski