我在命令行中将特殊字符传递给python时遇到问题。这是我的剧本:
# -*- coding: utf-8 -*-
import sys
if __name__ =="__main__":
if len(sys.argv) == 2 :
str = sys.argv[1]
else :
str = '\r\nte st'
print (str)
这些是我的测试用例:
D:\>testArgv.py "\r\nt est"
\r\nt est
D:\>testArgv.py
te st
我想知道如何从命令行向python传递参数,以达到像后一种情况一样的目标。或者我应该如何改变我的剧本。
答案 0 :(得分:2)
您可以将 decode
与 'unicode_escape'
text encoding 模块中的codecs
一起使用,将原始字符串转换为典型的ol&# 39;字符串:
# -*- coding: utf-8 -*-
import sys
from codecs import decode
if __name__ =="__main__":
if len(sys.argv) == 2:
my_str = decode(sys.argv[1], 'unicode_escape')
# alternatively you transform it to a bytes obj and
# then call decode with:
# my_str = bytes(sys.argv[1], 'utf-8').decode('unicode_escape')
else :
my_str = '\r\nte st'
print (my_str)
最终结果是:
im@jim: python3 tt.py "\r\nt est"
t est
这适用于Python 3. In Python 2 str
types are pretty ambiguous as to what they represent ;因此,他们有自己的decode
方法,您可以使用它。因此,您可以删除from codecs import decode
,只需将该行更改为:
my_str.decode('string_escape')
获得类似的结果。
附录:不要使用str
等名称作为变量,它们会掩盖Python内置类型的名称。