Python之 /usr/bin/python^M: bad interpreter: No such file or directory

在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 

你可能感兴趣的:(Python,shell)