在Windows中使用带有中文字符的python调用命令行失败

时间:2014-07-10 14:56:24

标签: python windows gbk

在Windows中的python,py脚本中的(test.py),调用dos命令的os.system或subprocess.Popen失败,但在命令行下成功(windows-> cmd.exe),脚本如下 附加信息:

  • 1。 dos(windows-> cmd.exe)编码为' cp936'属于' gbk'
  • 2。我已经通过notepad ++
  • 将test.py解码为utf-8
  • 3.decode(' gbk'),. encode(' gbk'),. decode(' utf-8'),. enode(&# 39; utf-8')已经尝试
  • 4。我不知道为什么
  • 错误信息:

        C:\Python27\python.exe E:/XtTradeClient/test.py
        File "E:/XtTradeClient/test.py", line 5 
        SyntaxError: Non-ASCII character '\xba' in file E:/XtTradeClient/test.py on line 5,but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
    
        Process finished with exit code 1
    
        -------------------------------------------------------------------------------
        # encoding='utf-8'
        import os
    
        if __name__ == "__main__":
            info = '汉字'
            cmd = 'echo ' + info
            if 0 != os.system(cmd):
                raise Exception('failed to call 'echo in command')
        -------------------------------------------------------------------------------
    

    2 个答案:

    答案 0 :(得分:1)

    显示的错误来自缺少编码注释。看起来你试图添加一个,但格式错误,因此无法识别。尝试:

    # encoding: utf-8
    

    然后下一个问题可能是shell期望的编码。如果您的源代码保存为UTF-8,则其中的(字节)字符串采用UTF-8编码,并以此方式传递给os.system()。您可能必须重新编码实际将这些字节显示为字符的应用程序。即:首先在终端的编码中从UTF-8解码为unicode,然后从unicode解码为str。通过使用unicode文字可以避免显式解码,至少对于ASCII字符范围之外的字符的(字节)字符串。

    # encoding: utf-8
    import os
    
    
    def main():
        info = u'汉字'
        cmd = 'echo ' + info
        if not os.system(cmd.encode('gbk')):
            raise Exception('failed to call `echo` command')
    
    
    if __name__ == '__main__':
        main()
    

    答案 1 :(得分:0)

    您的编码魔术评论不正确。将其更改为#-*- coding=utf-8 -*-

    有关详细信息,请参阅pep 0263