FTP를 통해 Python 파일을 VPS로 전송하고 실행하려고 하면 다음 ./foo.py
오류가 반환되는 문제가 발생했습니다 : No such file or directory
.
오류는 실행하려는 파일이 존재하지 않음을 나타내는 것 같습니다. 그러나 문제 없이 프로그램을 실행할 수 있으므로 python foo.py
오류가 실제로 다른 의미를 가질 수도 있다고 믿게 됩니다.
처음에는 셔뱅라인의 문제일지도 모른다고 생각하여 파일의 내용을 모두 복사하여 아직 FTP를 통해 전송하지 않은 VPS의 새 파일에 붙여넣었습니다. 두 파일 모두 내용이 동일하지만 새 파일을 실행하면 ./bar.py
예상대로 실행됩니다.
그래서 전송 방식에 문제가 있을 수도 있겠다는 결론을 내렸습니다. ASCII와 바이너리 간에 전환했지만 두 전송 방법 모두에서 동일한 오류가 발생합니다.
이런 일이 발생하는 것을 방지하는 것이 가능합니까?
답변1
이는 파일에 \r\n
줄 종결자가 포함된 경우에 발생합니다 .\n
\r
C0 제어 코드이는 "현재 줄의 시작 부분으로 이동"을 의미합니다.
문제를 해결하려면 를 실행하세요 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 클라이언트에 의해 제거/변경됩니다.