Python 실행 파일을 실행하려고 하면 FTP를 통해 서버로 전송한 후 ": 해당 파일 또는 디렉터리가 없습니다"가 반환되는 이유는 무엇입니까? [복사]

Python 실행 파일을 실행하려고 하면 FTP를 통해 서버로 전송한 후 ": 해당 파일 또는 디렉터리가 없습니다"가 반환되는 이유는 무엇입니까? [복사]

FTP를 통해 Python 파일을 VPS로 전송하고 실행하려고 하면 다음 ./foo.py오류가 반환되는 문제가 발생했습니다 : No such file or directory.

오류는 실행하려는 파일이 존재하지 않음을 나타내는 것 같습니다. 그러나 문제 없이 프로그램을 실행할 수 있으므로 python foo.py오류가 실제로 다른 의미를 가질 수도 있다고 믿게 됩니다.

처음에는 셔뱅라인의 문제일지도 모른다고 생각하여 파일의 내용을 모두 복사하여 아직 FTP를 통해 전송하지 않은 VPS의 새 파일에 붙여넣었습니다. 두 파일 모두 내용이 동일하지만 새 파일을 실행하면 ./bar.py예상대로 실행됩니다.

그래서 전송 방식에 문제가 있을 수도 있겠다는 결론을 내렸습니다. ASCII와 바이너리 간에 전환했지만 두 전송 방법 모두에서 동일한 오류가 발생합니다.

이런 일이 발생하는 것을 방지하는 것이 가능합니까?

답변1

이는 파일에 \r\n줄 종결자가 포함된 경우에 발생합니다 .\n\rC0 제어 코드이는 "현재 줄의 시작 부분으로 이동"을 의미합니다.

문제를 해결하려면 를 실행하세요 dos2unix foo.py.

세션 예:

ben@joyplim /tmp/cr % echo '#!/usr/bin/env python' > foo.py
ben@joyplim /tmp/cr % chmod +x foo.py 
ben@joyplim /tmp/cr % ./foo.py 
ben@joyplim /tmp/cr % unix2dos foo.py 
unix2dos: converting file foo.py to DOS format ...
ben@joyplim /tmp/cr % ./foo.py       
: No such file or directory
ben@joyplim /tmp/cr % ./foo.py 2>&1 | xxd 
0000000: 2f75 7372 2f62 696e 2f65 6e76 3a20 7079  /usr/bin/env: py
0000010: 7468 6f6e 0d3a 204e 6f20 7375 6368 2066  thon.: No such f
0000020: 696c 6520 6f72 2064 6972 6563 746f 7279  ile or directory
0000030: 0a                                       .

0d3a출력에 특별한 주의를 기울이십시오 .

답변2

파일 권한 문제일 수 있나요?

$ chmod +x foo.py

이를 유지하고 싶다고 명시적으로 표시하지 않으면 대부분의 FTP 클라이언트에 의해 제거/변경됩니다.

관련 정보