"/usr/bin/python^M: bad interpreter"

65

无法确定在 PyCharm 中更改 EOF 的位置。 我的脚本以此为开头:

#!/usr/bin/python
# -*- coding: utf-8 -*-

当我尝试像可执行文件一样运行它(chmode +x),它输出类似这样的内容:

-bash: ./main.py: /usr/bin/python^M: 错误的解释器:没有那个文件或目录


4
脚本中似乎有^M字符,请使用dos2unix。 - avasal
看起来原始文件是在MSDOS/Windows下创建的,没有UNIX/Linux行尾支持。因此,当您尝试在UNIX/Linux上运行此文件时,会出现错误。最简单的方法是在UNIX/Linux上重新创建该文件。可扩展的方法是配置MSDOS/Windows shell以支持使用UNIX/Linux行尾保存。这有助于您在两个系统上创建和重复使用文件。 - dzNET
10个回答

55
问题不是EOF而是EOL。Shell看到了一个^M以及行尾,因此试图找到/usr/bin/python^M
通常陷入这种状态的方法是使用MSDOS/Windows编辑器编辑Python文件,然后在Unix上运行。最简单的修复方法是在文件上运行dos2unix或者使用明确允许使用Unix行结尾保存的编辑器编辑文件。

我认为Python解释器根本没有运行。Shebang解释器在^M上失败了。 - jpic
抱歉,是的,shell 看到了这个。 - mmmmmm
3
如果您没有dos2unix,请在Ubuntu 14.04中执行“sudo apt-get install dos2unix”。 - gsamaras

37

将行分隔符设置为Unix

Unix


3
如果文件已经保存,这似乎没有帮助。可能只适用于新文件?对于那些文件,您需要使用dos2unix工具。 - ksaylor11

33
你可以在这里找到答案: ./configure : /bin/sh^M : bad interpreter 作为Mac OS X用户,我没有找到dos2unix命令。替代方法是使用vi/vim::set fileformat=unix,然后保存文件:wq

25
如果您正在使用 Vim,请输入以下命令:
:set fileformat=unix

16

你可以尝试使用 dos2unix <filename> 命令。


1
请注意:如果您没有安装 dos2unix,CentOS 将无法正常运行。要安装它,请使用以下命令:sudo yum install dos2unix。此程序包可以在软件库中找到。 - ThinkBonobo

10

安装dos2unix: sudo apt-get install dos2unix

然后让它做魔法: dos2unix 文件名


6

对于 MacOS,您可以通过Homebrew进行安装,操作如下:

brew install dos2unix

并且接下来执行

dos2unix FILENAME

3
与江伟宇的帖子类似,在UNIX/Linux上,我使用vi编辑Python文件。使用vi,您可以看到每行末尾的^M。
找到以下行/usr/bin/python^Mend将光标移动到行末
delete删除^M
要保存文件并退出,请键入::wq 这对我有用。

3
您可以尝试这样做:
sed --in-place 's/^M//g' main.py

[要输入^M,请按ctrl+v、ctrl+m键]

2

只是Windows和Unix格式的问题:

尝试使用以下命令:dos2unix fileName

运行后再次尝试,应该可以正常工作。


这个回答有什么新的补充或改进吗? - mmmmmm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接