Python Argparse: Raw string input
如果之前有人问过这个问题,我确实在搜索它,但所有的命中似乎都是关于python原始字符串,而不是关于argparse。
无论如何,我有一个代码,用户以字符串形式提供,然后处理此字符串。但是,我有一个问题,因为我希望我的代码能够区分
这本身很简单,我可以让逻辑工作来检查字符串等。但是,argparse似乎没有保持输入字符串原始。所以如果我要写:
Item 1
Item 1
我可以包含一个bodge(例如,我可以让用户输入say
有没有办法确保argparse解析的字符串是原始的? (即,如果我输入
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
使?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
[/collapse]