/usr/bin/python^M: 直譯器錯誤: 沒有那個檔案或目錄(問題解決)
阿新 • • 發佈:2019-02-06
遇見問題
因為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中轉換:
- 首先要確保檔案有可執行許可權:#sh>chmod a+x filename
- 然後修改檔案格式: #sh>vi filename
- 利用如下命令檢視檔案格式: :set ff 或 :set fileformat
- 可以看到如下資訊: fileformat=dos 或 fileformat=unix
- 利用如下命令修改檔案格式: :set ff=unix 或 :set fileformat=unix
- 儲存退出,你就可以以./filename方式執行filename檔案了
這圖是我操作過程的一部分: