由于UTF8 BOM(字节顺序标记),找不到Shebang可执行文件

2024-04-30 05:00:35 发布

您现在位置:Python中文网/ 问答频道 /正文

出于某种原因,我的一个脚本中的shebang不起作用:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
print "Hello World"

当我执行这个文件时,我得到一个错误

 % ./test.py
./test.py: 1: #!/usr/bin/env: not found

我的/usr/bin/目录的内容没有问题:这里有envpython两个目录,它们具有正确的执行权限。


Tags: 文件pytest目录env脚本helloworld
2条回答

这是因为Unix和Linux是如何处理shebang的。^{}必须是文件中的前两个字节。如果你有一个BOM,那么这不再是真的,因此出现了错误。

注意,从python解释器的角度来看,放置BOM是完全无用的,因为# -*- coding: utf-8 -*-已经告诉python编码。

AFAIK BOM通常与utf-8一起使用。它用于UTF-16和similia,以指定字节顺序。如果编辑器假定使用了错误的编码,则应该能够使用正确的编码显式打开文件。

问题的原因是,我的文件是使用带BOM(字节顺序标记)的UTF8编码的。

删除BOM,即使用UTF8编码文件而不使用BOM,解决了这个问题。

注意:对于Notepad++用户,“UTF8不带BOM”在编辑器中也被称为(奇怪的)“ANSI as UTF-8”。

相关问题 更多 >