遇见问题
因为linux在虚拟机中,所以就在本地敲python代码,敲完后再拿到虚拟机去执行,再输入./filename.py时,就遇到这样的一个问题:
bash: ./filename.py: /usr/bin/python^M: 解释器错误: 没有那个文件或目录
开始还以为是自己的python路径不对,但用which python命令查看却发现路径已经配置对了。因为有另一种执行方式,就是直接python filename.py,后来我发觉这种方式虽然能够执行代码,但执行结果却不对,于是,就去搜索了一下。发现,原来是自己在dos下写的代码,拿到linux下,存在不兼容。
分析原因
这是不同系统编码格式引起的:在windows系统中编辑的.sh .py文件可能有不可见字符,所以在Linux系统下执行会报以上异常信息。一般是因为windows行结尾和linux行结尾标识不同造成的。
解决方案
在windows下解决:
利用一些编辑器如UltraEdit或EditPlus等工具先将脚本编码转换,再放到Linux中执行。转换方式如下(UltraEdit):File-->Conversions-->DOS->UNIX即可。
linux下直接替换:
sed -i 's/^M//g' filename (注意^M 在linux 下写法 按^M 是回车换行符,输入方法是按住CTRL+v,松开v,按m)(这个方法我试过了,不灵验)
也可在Linux中转换:
- 首先要确保文件有可执行权限:#sh>chmod a+x filename
- 然后修改文件格式: #sh>vi filename
- 利用如下命令查看文件格式: :set ff 或 :set fileformat
- 可以看到如下信息: fileformat=dos 或 fileformat=unix
- 利用如下命令修改文件格式: :set ff=unix 或 :set fileformat=unix
- 保存退出,你就可以以./filename方式执行filename文件了
这图是我操作过程的一部分: