Python脚本给出::没有这样的文件或目录

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

: 无此文件或目录

我可以通过执行python script_name.py来运行'broken'脚本,并且在看了一下我拾取的一般想法之后,也许我的hashbang的行结束被改变了(默默地),所以我看着行结束一个工作脚本和一个破坏的脚本通过VI中的:set list选项,如这个问题所示 – > 在文本文件中查看行结尾

这两个文件似乎结束使用相同的字符( $ ),所以我有点在如何从这里继续的损失。 具体而言,如果实际上“ set list不是正确的方法,那么如何实际“查看”结束行。

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

– 编辑: –

通过dos2unix运行脚本确实再次运行,但我想知道有什么方法可视化以VI(M)结尾的行,或者为什么Geany以某种方式将行结束符转换为首位(因为我从来没有在DOS下工作/ Windows系统)。

从上面的注释看起来你有dos的行尾,所以hashbang行没有正确处理。

在Vim中,行结束风格不会显示:set list ,因为该选项仅在读取/写入文件时使用。 在记忆线的结局总是那样,线结束。 用于文件的行结束风格保存在Vim每个文件选项中,奇怪地称为fileformat

要从Vim中查看/更改行结束样式,可以使用以下命令:

 :set fileformat :set ff 

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

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

 :w ++ff=unix 

或者如果你喜欢:

 :set ff=unix 

然后正常保存文件。

所以看到所有血淋淋的细节只是做:help file-formats:help file-formats:help fileformats :help file-formats

就我个人而言,我发现它使用Python解释器的直接path有点不对。 由于你不使用Windows平台,你应该有程序env,通常在/ usr / bin(/ usr / bin / env)中。 尝试使用以下shebang:

 #!/usr/bin/env python 

不同的发行版在/ bin或/ usr / bin(或一些奇怪的位置)中存储python二进制文件,这使得脚本configuration无关(尽可能在这里,我们有可能将env存储在其他地方;尽pipe如此,可能env不在/ usr / bin中,比python错位)。

我有类似的问题(如果不完全相同),并为我工作。

此外,我有两个Python解释器(2.7.x和3.x)安装,所以我需要使用“python3”参数env。 AFAIR通常将不同的名称链接到不同的二进制文件,所以“env python”将在我的系统上运行python2.7,“env python3”(也就是python33,或者像那样的smth)会运行p3k,而“env python2”(也是python27,等)将运行Python 2.7.x. 宣布应该使用哪个版本的解释器似乎也是一个好主意。

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

DOS2UNIX的

这帮助我运行python脚本

这通常发生在我们在Windows中打开文件进行更改并保存时。 如果你打开文件,在每一行的末尾find^ M个字符

谢谢

我遇到了这个问题,在Windows上编辑我的代码,使用git检查它,检查并在Linux上运行它。

我的解决scheme是:告诉git做正确的事情。 我在Windows上发布了这个命令:

 git config --global core.autocrlf true 

修改文件并将其检入; 瞧,再也没有这个问题了。

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