我正在尝试创建一个程序,以便我可以使用以下格式通过命令行运行它:
./myProgram
我将其设为可执行文件并将#!/usr/bin/env python
放入标题中,但它给了我以下错误。
env: python\r: No such file or directory
然而,当我运行“python myProgram”时,它运行正常。有人能告诉我我做错了吗?
答案 0 :(得分:17)
你的行结尾是错误的。使用dos2unix
修复它们。
答案 1 :(得分:11)
+1关于ignacio的建议。
但是,为了更直接地回答问题的第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'
这里是我从hardcore Python intro course notes抄袭的其他相关属性的快速摘要:
答案 2 :(得分:3)
dos2unix filename.py
或在vim内部发出命令:set fileformat=unix
并保存。