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クライアントによって削除/変更されます。