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

今天把一个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

发布者

Tanky Woo

Tanky Woo,[个人主页:https://tankywoo.com] / [新博客:https://blog.tankywoo.com]

《乱记 EOL(End of Line)在windows和linux不同导致的Python问题》有9个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注