Python Argparse:原始字符串输入

Python Argparse: Raw string input

如果之前有人问过这个问题,我确实在搜索它,但所有的命中似乎都是关于python原始字符串,而不是关于argparse。

无论如何,我有一个代码,用户以字符串形式提供,然后处理此字符串。但是,我有一个问题,因为我希望我的代码能够区分
\
,以便用户可以控制它们是否获得换行符或
分别出现在输出中。

这本身很简单,我可以让逻辑工作来检查字符串等。但是,argparse似乎没有保持输入字符串原始。所以如果我要写:Here is a list:
Item 1
它会被解析为Here is a list:\
Item 1
。如果我要在输入字符串中用\
替换
,那么解析完全相同的东西,就无法区分这两者。

我可以包含一个bodge(例如,我可以让用户输入say $
表示
出现在输出中,或只是
表示换行符)。但这很麻烦,使代码的使用变得复杂。

有没有办法确保argparse解析的字符串是原始的? (即,如果我输入
它?馕?code>>而不?wyn>>\

B>

A>
再次,对不起,如果以前曾经问过这个问题,但我找不到答案,经过一个多小时的努力寻找答案,我就没有想法?ń剐∥荩N魏魏退邪镏崆案杀?<


示例代?ǘ圆黄穑绻獠黄鹱饔茫恢廊绾巫詈玫匚猘rgparse做示例?

?

1
2
3
4
5
6
7
8
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 ) )


如注释?wyn>?code>argparse?s.argv一起使用,这是一个由shell和Python解释器生成的列表。

使?ode>argv echo脚本:

1
2
3
0928:~/mypy$ cat echo_argv.py
import sys
print(sys.argv)

我得到(使用bash shell):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
0929:~/mypy$ python echo_argv.py Here is a list:
Item 1
['echo_argv.py', 'Here', 'is', 'a', 'list:nItem', '1']
0931:~/mypy$ pytho"echo_argv.py "Here is a"ist:
Item 1 "

['echo_argv.py', 'Here is a list:\
Item 1 '
]
0931:~/mypy$ pytho"echo_argv.py "Here is a l"t:\
Item 1 "

['echo_argv.py', 'Here is a list:\
Item 1 '
]
[/cc<wyn>
<code>argparse</</wyn>code>argv</code>视为字符串列表。 它对这些字符串没有任何作用,至少不使?wyn>?code>Non</wyn> <code>type</code>参数。
</p>

<div clas</ul>[/collapse]</div><hr>
<p>
这是您的问题的可能解决方案:
</p>

[cc lang="python"]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 '-' * 80
raw_text = eval('"' + args.text.replace('"', '\"') + '"')
print raw_text
print '-' * 80
print args.text

但要注意一件事,eval真的很危险


正如@hpaulj指出的那样,庠从?wyn>?code>sys.argv的工作方式。 您的选择是使用您获得的转义字符处理字符串。

在SO上看一下这个答案:
在Python中处理字符串中的转义序列
。 基本?wyn>?code>string?code>unicode_escape来处理字符串。 它比手工处理你的字符串更apse title=""]

    [/collapse]