Por que tentar executar um executável python retorna ': Nenhum arquivo ou diretório' depois de transferi-lo para o servidor via FTP? [duplicado]

1

Estou tendo um problema onde quando eu transfiro um arquivo Python para o meu VPS via FTP e tento executá-lo usando ./foo.py Eu sou retornado com o erro: : No such file or directory .

O erro parece indicar que o arquivo que estou tentando executar não existe. Mas posso executar o programa sem problemas usando python foo.py , o que me leva a acreditar que o erro realmente significa outra coisa.

No começo eu pensei que poderia ser um problema com a linha shebang, então copiei todo o conteúdo do arquivo e o colei em um novo arquivo no VPS que não havia sido transferido via FTP. Os dois arquivos tinham exatamente o mesmo conteúdo, mas quando eu executei o novo arquivo usando ./bar.py ele foi executado conforme o esperado.

Então, cheguei à conclusão de que isso poderia ser um problema com a forma como ele é transferido. Eu mudei entre ASCII e binário, mas ambos os métodos de transferência dão o mesmo erro.

É possível impedir que isso aconteça?

    
por Kian Cross 24.06.2015 / 21:56

2 respostas

0

Isso acontece quando um arquivo contém \r\n como terminador de linha em vez de \n , pois \r é um controle de C0 código que significa "ir para o começo da linha atual".

Para corrigir, execute dos2unix foo.py .

Exemplo de sessão:

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                                       .

Especificamente, observe o 0d3a na saída.

    
por 24.06.2015 / 22:41
0

Poderia ser um problema de permissão de arquivo?

$ chmod + x foo.py

Se você não indicar especificamente que deseja manter, eles serão removidos / alterados pela maioria dos clientes ftp.

    
por 24.06.2015 / 22:22