Tanky WooRSS

乱记 EOL(End of Line)在windows和linux不同导致的Python问题

02 Dec 2012
这篇博客是从旧博客 WordPress 迁移过来,内容可能存在转换异常。

今天把一个Python的代码通过Samba从Windows传到Gentoo里,看到已经有x权限了,就直接通过./xxx.py来运行程序,结果报错:

: No such file or directory

但是我又通过python xxx.py来测试,结果又可以正常运行

当时觉得这个问题很奇怪,冒号前面啥也没有。

于是查了下文件属性:

$ file xxx.py

xxx.py: Python script, ASCII text executable, with CRLF line terminators

果然就提示有问题了。

于是vim打开程序,设置fileformat:

: set ff=unix

于是就可以通过./xxx.py运行了。

但是还有一个比较纳闷的事,就是为何用./xxx.py无法执行,但是用python xxx.py却可以,我在stackoverflow上提问了。因为./xxx.py是通过代码第一行指定的解释器来执行,但是这里相当于:

!/usr/bin/env python^M

肯定就无法找到相关解释器来执行代码了。

其实我的代码首行如果不写成:!/usr/bin/env python , 而改成:!/usr/bin/python,则提示比较清楚了:

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

在stackoverflow上的提问帖传送门:python-file-in-dos-and-unix