dos和unix中的python文件

时间:2012-12-02 12:01:57

标签: python linux

我在windows中有一些python文件,我将它们通过samba传输到我的gentoo

我检查他们的模式是可执行的,我使用./xxx.py来运行它,但是收到错误:

  

:没有这样的文件或目录

我感到困扰的是它没有提示哪个文件不在这里。

但是当我使用python xxx.py时,它可以以正确的方式运行。

然后我在vim中使用set ff检查CR字符,发现它是dos,然后我使用set ff=unix来设置它,现在它可以使用{{ 1}}

但我不知道为什么./xxx.py可以使用python xxx.py

2 个答案:

答案 0 :(得分:3)

Windows行结尾为CRLF或\r\n

Unix只使用\n

当操作系统读取你的shebang行时,它会看到#!/usr/bin/python\r。它无法运行此命令。

从unix shell中查看此行为的简单方法是$(echo -e 'python\r')(尝试将python\r作为命令运行)。此输出也类似于: command not found

Windows下的许多高级代码编辑器都支持使用unix行结尾本地保存。

答案 1 :(得分:2)

DOS文件以CR + LF结束行,Unix文件只使用LF。这意味着当Unix读取您的文件以确定可执行文件名是什么时,该可执行文件的名称以CR结尾。像这样:

#!/usr/bin/python

print("Blah!")

当我跑步时,我得到:

$ ./test.py 
bash: ./test.py: /usr/bin/python^M: bad interpreter: No such file or directory

在你的情况下发生的情况是CR字符(上面的^ M)没有被打印出来但是被你的终端“执行”,即光标将返回到行的开头。因此,^ M之前的所有内容都会被覆盖:

$ ./test.py 

:错误的解释器:没有这样的文件或目录

这就是为什么你不能执行以Unix结尾的DOS文件的文件。

任何甚至远程现代的源代码控制系统都会为您处理此问题,并在您签出源代码时更改文件结尾。