从命令行传递特殊字符

时间:2016-01-24 09:34:30

标签: python string cmd

我在命令行中将特殊字符传递给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传递参数,以达到像后一种情况一样的目标。或者我应该如何改变我的剧本。

1 个答案:

答案 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内置类型的名称。