osx python - 如何解码sys.argv?

时间:2012-01-19 22:15:32

标签: python macos

我认为我甚至不会使用时髦的角色 - 只是试图传入“-d”,但我的冲刺似乎已经被淹没了。如果我只是打印sys.argv [1]它看起来没问题,但如果我打印整个列表sys.argv,我可以看到时髦的字符而不是我的破折号。 Mac OSX 10.6.8 Python 2.6.1

#!/usr/bin/env python
import sys
if __name__ == "__main__":
    try:
        print "SVH FLAG sys.argv ",sys.argv

        num_args = len(sys.argv)
        for i in range(0,num_args):
            print "SVH FLAG sys.argv[",i,"] ",sys.argv[i]

    except:
        print "problem with sys.argv"

当我用-d调用它时,这给了我这个: ./deleteme.py -d /Library/Python/2.6/site-packages

SVH FLAG sys.argv  ['./deleteme.py', '\xe2\x80\x93d', '/Library/Python/2.6/site-packages']
SVH FLAG sys.argv[ 0 ]  ./deleteme.py
SVH FLAG sys.argv[ 1 ]  –d
SVH FLAG sys.argv[ 2 ]  /Library/Python/2.6/site-packages

第一行输出上的那个时髦的字符串似乎真的搞乱了像optparse这样的东西,它看不到我的破折号。

我需要告诉sys给我一个正常的argv吗?

提前致谢!

2 个答案:

答案 0 :(得分:2)

不知何故,你没有输入一个连字符,而是一个实际的短划线字符(选项 - ),Unicode 8211,其UTF-8表示是三字节字符串\xe2\x80\x93。我们总是将命令行选项之前的字符称为“破折号”,但它实际上是一个连字符!

答案 1 :(得分:1)

你复制粘贴吗?我刚刚从

中取出前两个破折号

Which gives me this when I call it with -d: ./deleteme.py –d /Library/Python/2.6/site-packages

python
Python 2.7.1 (r271:86832, Jun 16 2011, 16:59:05) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> '–'
'\xe2\x80\x93'
>>> '-'
'-'
>>> 

这是来自单词doc或pdf还是其他什么?重新输入它,你应该没事。