在windows的IDE开发,部署在linux服务器运行时,需要注意windows和linux的文件编码问题
part01:
在windows系统下写的python脚本,在linux下赋予权限chmod +x xxx.py 以后,执行./xxx.py运行提示:bash: /usr/bin/autocrorder: /usr/bin/python^M: bad interpreter: No such file or directory
分析:这是不同系统编码格式引起的:在windows系统中编辑的.sh .py文件可能有不可见字符,所以在Linux系统下执行会报以上异常信息。一般是因为windows行结尾和linux行结尾标识不同造成的。
解决:
1)在windows下转换:
利用一些编辑器如UltraEdit或EditPlus等工具先将脚本编码转换,再放到Linux中执行。转换方式如下(UltraEdit):File-->Conversions-->DOS->UNIX即可。
2)linux下直接替换:
sed -i 's/^M//g' filename (注意^M 在linux 下写法 按^M 是回车换行符,输入方法是按住CTRL+v,松开v,按m)
3)也可在Linux中转换:
首先要确保文件有可执行权限
#sh>chmod a+x filename
然后修改文件格式
#sh>vim filename
利用如下命令查看文件格式
:set ff 或 :set fileformat
可以看到如下信息
fileformat=dos 或 fileformat=dos
利用如下命令修改文件格式
:set ff=unix 或 :set fileformat=unix
:wq (存盘退出)
最后再执行文件
#sh>./filename
part02:
很多情况下python作为脚本语言编写的脚本都是在win上用IDE写好,自动化sync到服务器上,如果全部都是由IDE部署上去的一般不是很容易出问题,但是部署完之后在生产环境用vim稍作修改,往往会出现问题。如:
#! /usr/bin/python
# coding=utf-8
... ...
实际运行报错:/usr/bin/python^M: bad interpreter: No such file or directory
仔细检查报错内容,并不会发现任何语句错误或者路径错误,注意^m,这是windows下的断元字符。
所以问题就是,在多个环境上进行编写,可能会因为字符(win/unix换行符不一样)、缩进(两个编辑环境的缩进tab/space不一致)均易导致这种神不知鬼不觉的错误,很难找到。
解决方法:
vim打开文件,进入命令模式
:set ff=unix
将文本格式设置为unix
这样基本可以解决大部分因为不同环境编辑文本的问题,如果仍存在问题,就比较好解决了,基本直接检查两个环境上缩进配置是否一致。
参考:https://blog.csdn.net/l1028386804/article/details/79055410
https://blog.csdn.net/qq_31331027/article/details/84590300