1. 程式人生 > >/usr/bin/python^M: 直譯器錯誤: 沒有那個檔案或目錄(問題解決)

/usr/bin/python^M: 直譯器錯誤: 沒有那個檔案或目錄(問題解決)

遇見問題

因為linux在虛擬機器中,所以就在本地敲python程式碼,敲完後再拿到虛擬機器去執行,再輸入./filename.py時,就遇到這樣的一個問題:

bash: ./filename.py: /usr/bin/python^M: 直譯器錯誤: 沒有那個檔案或目錄

開始還以為是自己的python路徑不對,但用which python命令檢視卻發現路徑已經配置對了。因為有另一種執行方式,就是直接python filename.py,後來我發覺這種方式雖然能夠執行程式碼,但執行結果卻不對,於是,就去搜索了一下。發現,原來是自己在dos下寫的程式碼,拿到linux下,存在不相容。

分析原因

這是不同系統編碼格式引起的:在windows系統中編輯的.sh .py檔案可能有不可見字元,所以在Linux系統下執行會報以上異常資訊。一般是因為windows行結尾和linux行結尾標識不同造成的。

解決方案

在windows下解決:

利用一些編輯器如UltraEdit或EditPlus等工具先將指令碼編碼轉換,再放到Linux中執行。轉換方式如下(UltraEdit):File-->Conversions-->DOS->UNIX即可。

linux下直接替換:

sed -i 's/^M//g' filename (注意^M 在linux 下寫法 按^M 是回車換行符,輸入方法是按住CTRL+v,鬆開v,按m)(這個方法我試過了,不靈驗)

也可在Linux中轉換:

  1. 首先要確保檔案有可執行許可權:#sh>chmod a+x filename
  2. 然後修改檔案格式: #sh>vi filename
  3. 利用如下命令檢視檔案格式: :set ff 或 :set fileformat
  4. 可以看到如下資訊: fileformat=dos 或 fileformat=unix
  5. 利用如下命令修改檔案格式: :set ff=unix 或 :set fileformat=unix
  6. 儲存退出,你就可以以./filename方式執行filename檔案了

這圖是我操作過程的一部分:

原文地址