2011-10-06 96 views
-1

在Linux(Ubuntu 11.04)上,出於某種原因,Python腳本(特別是Django的manage.py,但我認爲不重要)最近開始表現奇怪:Python腳本只能使用「python」命令運行

當作爲

python manage.py 

運行它運行得很好;然而,隨着

./manage.py 

它顯示了以下錯誤:

: No such file or directory 

該文件的權限是766任何想法?

+0

如果沒有人幫助你,你可以嘗試http://askubuntu.com/ – Iznogood

+0

你的腳本中的shebang行是什麼?Python真的在那裏生活嗎? – kindall

+0

可能應該遷移到Unix。 –

回答

3

格倫·傑克曼的答案是正確的,但我沒有足夠的「信譽」,以給予好評他,所以我會在這裏張貼此。您的腳本採用Windows格式,每行都以回車換行結束,而不是換行。包括python在內的許多程序都可以處理任何格式而沒有問題。但是當你運行腳本時,shell認爲回車符是命令名的一部分。您的shell不是運行「/ usr/bin/env python」,而是嘗試運行「/ usr/bin/env python^M」(其中^ M是換行符)。由於它給你提供的錯誤信息,你可以告訴這種情況。就在「沒有這樣的文件或目錄」之前,它會打印它試圖執行的程序的名稱。它也打印了換行符,它將光標移回到行中最左邊的位置,這會清除冒號前的所有內容。

如果你沒有安裝DOS2UNIX的,你可以刪除換行符與

tr -d '\r' <manage.py> manage2.py; mv manage2.py manage.py 

您無法讀取和寫入在同一時間同一個文件,這就是爲什麼你必須使用一個臨時文件來保存tr的輸出。

+1

呃。你會認爲這個shell比那個更強大。 –

+0

@Tom Zych,我不確定你希望殼做什麼。如果你告訴它運行一個名爲/ usr/bin/python^M的程序,並且該文件不存在,它應該做什麼? – jlp

+1

它應該認識到'^ M'是行終止符的一部分,並忽略它。這不是航天科技。 –

1

如果權限爲766而您並非所有者,則無權執行該權限。 6表示您可以讀寫但不能執行。像這樣的系統文件是世界可寫的;通常它會是755。如果您擁有根本權力,請使用chmod 755 manage.py來修復它。

+0

如果他沒有執行權限,它會說:'權限被拒絕,而不是'找不到文件' – tMC

+0

正確,好點。儘管如此,它不應該是世界可寫的,這是一個安全漏洞。有人可以在裏面隱藏一個'rm -rf〜'。 –

2

我懷疑文件頂部的shebang不正確。 文件應該都可以啓動:

#!/usr/bin/python 

(其中Python路徑是which python輸出)

#!/usr/bin/env python 
+2

其可能'/ usr/bin/env'不是'/ bin/env' – tMC

0

當您直接運行的腳本,該腳本開始在第一行中指定的翻譯員:

#!COMMAND 

其中COMMAND是shell腳本的/ bin/bash。對於python,最好使用

#!/usr/bin/env python 

這樣就從環境中選擇了python的版本。

6

你的文件有回車符。你有沒有在Windows文本編輯器中編寫它?

嘗試運行dos2unix manage.py manage.py

相關問題