为什么尝试运行 python 可执行文件在通过 FTP 将其传输到服务器后会返回“:没有这样的文件或目录”?

为什么尝试运行 python 可执行文件在通过 FTP 将其传输到服务器后会返回“:没有这样的文件或目录”?

我遇到一个问题,当我通过 FTP 将 Python 文件传输到我的 VPS 并尝试使用它运行时,./foo.py我返回了错误:: No such file or directory

该错误似乎表明我尝试执行的文件不存在。但我可以毫无问题地运行该程序,python foo.py这让我相信该错误实际上可能意味着其他内容。

起初我以为这可能是shebang线路的问题,所以我复制了该文件的所有内容并将其粘贴到VPS上尚未通过FTP传输的新文件中。这两个文件具有完全相同的内容,但是当我使用它运行新文件时,./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 客户端删除/更改。

相关内容