Nie ma takiego pliku lub katalogu, ale mogę go zobaczyć!

11

Próbuję uruchomić skrypt Pythona na bezgłowym Raspberry PI przy użyciu winSCP i otrzymać następujący komunikat o błędzie:

Command '"./areadetect_movie_21.py"'
failed with return code 127 and error message
/usr/bin/env: python
: No such file or directory.

Kiedy próbuję uruchomić z terminala, otrzymuję:

: No such file or directory.

Próbuję podobnego skryptu python, w tym samym katalogu, z tym samym shebang python, tymi samymi uprawnieniami i przy użyciu tego samego użytkownika pi, i to działa.

Robię również lsi widzę plik, więc nie wiem, dlaczego nie będzie działać.

reggie
źródło
1
Czy edytowałeś plik `areadetect_movie_21.py 'w systemie Windows? Jeśli widziałeś to askubuntu.com/a/372691 .
Arkadiusz Drabczyk
tak w zaćmieniu, dlaczego?
reggie
Edytowałem swój komentarz po dodaniu go. Zobacz to askubuntu.com/a/372691 .
Arkadiusz Drabczyk
tak tak tak, zadziałało, wielkie dzięki! czy mogę przekonwertować komentarz na odpowiedź, abym mógł go zaakceptować.
reggie
ok, zrobiłem to :)
Arkadiusz Drabczyk

Odpowiedzi:

28

Od AskUbuntu , odpowiedź Gillesa :

Jeśli zobaczysz błąd „: Brak takiego pliku lub katalogu” (bez żadnych znaków przed dwukropkiem), oznacza to, że linia shebang ma na końcu znak powrotu karetki, prawdopodobnie dlatego, że był edytowany w systemie Windows (który używa CR, LF jako separator linii). Znak CR powoduje, że kursor przesuwa się z powrotem na początek wiersza po tym, jak powłoka wypisuje początek komunikatu, dzięki czemu widzisz tylko część po CR, która kończy ciąg interpretera, który jest częścią komunikatu o błędzie.

Usuń CR: linia shebang musi mieć końcówkę linii uniksowej (tylko wysuw linii ). Sam Python dopuszcza zakończenia linii CRLF, więc znaki CR w innych liniach nie boli. Z drugiej strony skrypty powłoki muszą być wolne od znaków CR.

Aby usunąć zakończenia linii Windows, możesz użyć dos2unix :

sudo dos2unix / usr / local / bin / casperjs

lub sed:

sudo sed -i -e 's / \ r $ //' / usr / local / bin / casperjs

Jeśli musisz edytować skrypty w systemie Windows, użyj edytora, który radzi sobie z końcówkami linii uniksowych (tj. Czymś mniej mózgowym niż Notepad) i upewnij się, że jest skonfigurowany do zapisywania końcówek linii uniksowych (tj. Tylko LF) podczas edycji pliku uniksowego.

Arkadiusz Drabczyk
źródło
1
Otworzyłem plik na pi za pośrednictwem ssh w notatniku na komputerze z systemem Windows i usunąłem powrót karetki i działa :) Dziękuję bardzo.
reggie