抱歉,如果之前有人问过这个问题,我确实搜索过,但所有的点击似乎都是关于python原始字符串的,而不是关于argparse的。
不管怎样,我有一个代码,用户输入一个字符串,然后处理这个字符串。但是,我有一个问题,因为我希望我的代码能够区分\n
和\\n
,这样用户就可以控制它们是换行还是在输出中出现\n
。
这本身非常简单,我可以让逻辑工作以检查字符串等。但是,argparse似乎没有保持输入字符串的原始状态。所以如果我写:Here is a list:\nItem 1
,它被解析为Here is a list:\\nItem 1
。如果我将输入字符串中的\n
替换为\\n
,那么就无法区分两者了。
我可以包含一个bodge(例如,我可以让用户输入say$\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 ) )
正如@hpaulj所指出的,您的问题源于shell和工作方式。您的选择是使用您得到的转义字符来处理字符串。
看看下面的答案: Process escape sequences in a string in Python . 基本上,使用
string_escape
或unicode_escape
来处理字符串。这比用手处理你的绳子好。如注释中所述,
argparse
与由shell和Python解释器生成的列表sys.argv
一起工作。使用简单的
argv
echo脚本:我得到(一个猛击壳):
argparse
将argv
视为字符串列表。它对那些字符串没有任何作用,至少对默认的None
type
参数没有作用。以下是解决您问题的可能方法:
但要注意一件事,eval really is dangerous
相关问题 更多 >
编程相关推荐