45

我有几个 python 脚本工作得很好,但是如果我尝试从 bash 运行它,一个脚本(截至今天早上)开始给我这个错误:

: 没有相应的文件和目录

我可以通过这样做来运行“损坏”python script_name.py脚本以及通过:set listVI中的选项破坏的脚本,如this question所示 - > View line-endings in a text file

两个文件似乎都使用相同的字符(a $)结束,所以我有点不知如何从这里开始。set list具体来说,如果方法不正确,如何实际“看到”行尾。

PS:脚本是可执行的,shebang 在那里,我说这只是这 1 个脚本在周末之前工作正常,但它从今天早上开始给我这个错误。

- 编辑: -

运行脚本dos2unix确实让它再次工作,但我想知道任何方式来可视化在 VI(M) 中以某种方式结束的行,或者为什么 Geany 首先以某种方式转换了行结尾(因为我从来没有在 dos/ Windows系统无论如何)。

4

4 回答 4

67

从上面的评论看起来你有 dos 行结尾,所以 hashbang 行没有被正确处理。

Vim中不显示行结束样式,:set list因为该选项仅在读取/写入文件时使用。在内存中,行尾始终是行尾。用于文件的行结束样式保存在 Vim 的每个文件选项中,奇怪地称为fileformat.

要查看/更改 Vim 的行尾样式,可以使用以下命令:

:set fileformat
:set ff

它将显示dosunix。你unix当然想要;-)。

要快速更改它,您可以使用以下命令保存文件:

:w ++ff=unix

或者,如果您愿意:

:set ff=unix

然后正常保存文件。

所以看看所有血淋淋的细节:help fileformat:help file-formats然后:help fileformats

于 2013-11-04T10:26:16.817 回答
10

也可以使用 dos2unix 命令转换文件格式

dos2unix

这帮助我运行 python 脚本

这通常发生在我们在 Windows 中打开文件并进行更改并保存时。如果您打开文件,请在每行末尾找到 ^M 字符

谢谢

于 2015-09-29T08:41:06.087 回答
3

就个人而言,我发现使用 python 解释器的直接路径有点错误。由于你不使用windows平台,你应该有程序env,通常在/usr/bin(/usr/bin/env)。尝试使用以下shebang:

#!/usr/bin/env python

不同的发行版将 python 二进制文件存储在 /bin 或 /usr/bin (或一些奇怪的位置),这使你的脚本独立于配置(尽可能,在这里我们有可能将 env 存储在其他地方;仍然 - 它更少可能 env 不在 /usr/bin 中,而不是 python 位置错误)。

我有类似的问题(如果不完全相同),这对我有用。

另外,我安装了两个 python 解释器(2.7.x 和 3.x),所以我需要为 env 使用“python3”参数。AFAIR 通常将不同的名称链接到不同的二进制文件,因此“env python”将在我的系统上运行 python2.7,“env python3”(也是 python33,或类似的东西)将运行 p3k,“env python2”(也是 python27,等)将运行 python 2.7.x。声明应该使用哪个版本的解释器似乎也是一个好主意。

于 2013-11-04T10:02:54.303 回答
2

我遇到了这个问题,我在 Windows 上编辑我的代码,用 git 签入,然后在 Linux 上签出并运行它。

我的解决方案是:告诉 git 做正确的事。我在 Windows 机器上发出了这个命令:

git config --global core.autocrlf true

修改文件并签入;瞧,再也没有这样的问题了。

正如Git 文档中所讨论的那样。

于 2017-08-11T21:17:30.263 回答