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

时间:2013-11-04 09:23:14

标签: python hashbang

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

  

:没有这样的文件或目录

我可以通过执行python script_name.py来运行'破碎'脚本,然后环顾一下我拾起的一般想法可能是我的行结束了hashbang被改变了(默默地)所以我看了如本问题所示,通过VI中的:set list选项在工作脚本的行尾和破损的脚本中 - > View line-endings in a text file

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

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

- 编辑: -

通过dos2unix运行脚本确实让它再次运行但我想知道任何方法可视化VI(M)中以某种方式结束的行或者为什么Geany以某种方式首先转换行结尾(因为我无论如何都不会在dos / windows系统上工作。)

3 个答案:

答案 0 :(得分:58)

从上面的评论中看起来你有dos行结尾,因此hashbang行没有得到正确处理。

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

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

:set fileformat
:set ff

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

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

:w ++ff=unix

或者如果您愿意:

:set ff=unix

然后正常保存文件。

因此,请查看所有血腥细节,:help fileformat:help file-formats:help fileformats

答案 1 :(得分:6)

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

dos2unix

这帮助我运行python脚本

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

由于

答案 2 :(得分:4)

就个人而言,我发现使用python解释器的直接路径有点不对劲。因为你不使用Windows平台,你应该有程序环境,通常在/ usr / bin(/ usr / bin / env)。尝试使用以下shebang:

#!/usr/bin/env python

不同的发行版在/ bin或/ usr / bin(或一些奇怪的位置)存储python二进制文件,这个使得你的脚本与配置无关(尽可能,这里我们有可能将env存储在别处;仍然 - 不太可能env不在/ usr / bin中,而python错位了。)

我有类似的问题(如果不完全一样)并且对我有用。

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