使python程序可执行的问题

Sam*_*Sam 4 python

我正在尝试创建一个程序,以便我可以使用以下格式通过命令行运行它:

./myProgram
Run Code Online (Sandbox Code Playgroud)

我让它可执行并放入#!/usr/bin/env python标题,但它给了我以下错误.

env: python\r: No such file or directory
Run Code Online (Sandbox Code Playgroud)

但是,当我运行"python myProgram"时,它运行正常.有人能告诉我我做错了什么吗?

Ign*_*ams 17

你的行结尾是错误的.使用dos2unix来解决这些问题.


wes*_*cpy 11

关于ignacio的建议+1.

但是,为了更直接地回答问题的第1部分,每个OS /系统使用不同的行终止字符:

POSIX(任何Unix风格,如Linux,*BSD,Mac OS X等)使用\n(NEWLINE)而DOS/Win使用组合\r\n(CR /回车+ NEWLINE)和旧Mac OS 8或9仅使用CR或\r.

要解决这个问题,您可以运行像ignacio建议的实用程序,或者您应该可以从文本编辑器中执行此操作(但可能不是很明显).

回答你问题的另一部分,之所以能$ python myProgram有效,是因为Python将所有三个不同的行结尾都视为相同......顶部的shebang行被忽略,因为你告诉Python加载并运行该脚本," #"表示第一行是注释,因此被忽略.

当你告诉你的操作系统shell运行它时,它需要解析该行并执行你请求的任何解释器,但如果它不能,它会像你一样呕吐.

希望这可以帮助!

PS.在旁注中,您可以找到操作系统上正在使用的行终止字符,只需查看os.linesep(数据)属性即可.例如,在我的Mac(OS X)上,我得到了这个:

>>> import os
>>> os.linesep
'\n'
Run Code Online (Sandbox Code Playgroud)

这里是我从我的核心Python简介课程笔记中抄袭的其他相关属性的快速摘要: 替代文字

  • 我喜欢这张桌子,我喜欢这样一个事实:你要小心指出有"旧"Mac和"新"Mac这样的东西,它们是不同的. (2认同)