2014-07-10 18 views
1

在python中的windows中,在py腳本(test.py)中,調用dos命令的os.system或subprocess.Popen失敗,但在命令行下成功(windows - >的cmd.exe),腳本是如以下 附加信息: 蟒蛇調用Windows中的中文字符的命令行失敗

  • 1. DOS(Windows的> cmd.exe的)編碼是 'CP936',屬於 'GBK'
  • 2.我有解碼('gbk'),.encode('gbk'),.decode('utf-8'),.enode('utf-8')將test.py解碼成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') 
        ------------------------------------------------------------------------------- 
    

    回答

    0

    顯示的錯誤來自缺少的編碼註釋。它看起來像你試圖添加一個,但格式是錯誤的,所以它不被識別。嘗試:

    # 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() 
    
    0

    你的編碼魔法的評論是不正確的。將其更改爲#-*- coding=utf-8 -*-

    有關更多信息,請參見pep 0263

    +0

    '#編碼= UTF-8', '#編碼= UTF-8', '# - * - 編碼= UTF-8 - * - ' 正確工作,
    更精確地,第一或第二行必須匹配正則表達式「coding [:=] \ s *([ - \ w。] +)」。 「
    - 從頁面pep0263 – Oscarzhao