【问题标题】:Python script gives `: No such file or directory`Python脚本给出`:没有这样的文件或目录`
【发布时间】:2013-11-14 21:27:09
【问题描述】:

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

: 没有这样的文件或目录

我可以通过执行python script_name.py 来运行“损坏”脚本,在环顾四周后,我得出的总体想法是,我的 hashbang 行结尾可能已更改(默默地),所以我查看了通过 VI 中的 :set list 选项,工作脚本和损坏脚本的行结束,如本问题所示 -> View line-endings in a text file

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

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

-- 编辑:--

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

【问题讨论】:

  • 你是如何运行它的?你没有忘记shebang吗?
  • 运行 'file script_name.py' 如果它是 ASCII 文本可执行文件,使用 CRLF 行终止符,您必须使用 dos2unix 命令转换文件
  • 我有一个简单的打印语句作为代码的第一行,然后立即退出。代码本身不是问题,我只是说我可以通过python scriptname.py 调用它来运行它,但不能通过./scriptname.py 调用它,它是可执行的。
  • @InbarRose sudo chmod 0777 filename永远的答案。
  • 要查看行尾样式,请使用vim命令:set fileformat或简称:set ff。它将显示dosunix。您可以使用:w ++ff=unix:set ff=unix 转换文件,然后正常保存。

标签: python hashbang


【解决方案1】:

从上面的 cmets 看来,您有 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

【讨论】:

  • 帮了我很多!谢谢。
【解决方案2】:

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

dos2unix

这有助于我运行 python 脚本

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

谢谢

【讨论】:

  • 这绝不是问题的答案。您的回答甚至已经在问题中被我自己特别提到了。
【解决方案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。声明应该使用哪个版本的解释器似乎也是一个好主意。

【讨论】:

  • 被否决:行尾是 OP 问题的原因,而不是这个。这是毫无根据的社论。
  • 我实际上同意 - 事后我知道这不是足够的答案,尽管我不想删除它或编辑只是为了重复别人的答案。我不会把它称为错误的猜测,尽管这不是重点。
【解决方案4】:

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

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

git config --global core.autocrlf true

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

正如在Git documentation 上讨论的那样。

【讨论】:

    猜你喜欢
    • 2017-06-16
    • 2016-01-11
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 2020-05-09
    • 2017-08-06
    相关资源
    最近更新 更多