zoukankan      html  css  js  c++  java
  • windows中的程序放在linux上因为字符集不同出错

    问题

    在把windows下的一个python脚本挪到linux下的时候,出现了一个奇怪的问题,就是标题那样的报错,很明显,shell没有用对应的python解释器去解释脚本,而是直接用shell解释了,下面就直接导致了一系列奇奇怪怪的报错。看了下面这篇文章还是让人略有启发的

     

    $ head  weixinbaojing.py

    #!/usr/bin/env python3

    import requests
    import json
    import sys

     

    $ chmod u+x weixinbaojing.py$

    python ./weixinbaojing.py han_xu test contest
    env: python3 : No such file or directory

    : No such file or directory

     

    找不到文件?可是无论怎么修改脚本,都没办法解决。找不到文件,那应该是第一行的env后面的换行符的问题

    linux下的文本文件以ascii码为10的字符表示换行。而windows下则使用连续的13和10两个字符。在python和c语言里使用 代表ascii符为13的字符,叫做回车符,而 代表ascii码为10的字符,叫做换行符。对于:

    #!/usr/bin/env python

    这样一行文本,windows下的程序会认为#!/usr/bin/env python3就是一行。而linux呢,则会认为#! /usr/bin/env python3 是一行。于是,刚才的错误就出来了,因为根本没有python3 这个文件嘛。

    有个比较奇怪的地方,仔细想想,env如果出错的话应该是报这样的错误信息的:

    可能有人会怪windows怎么那么傻,一个 不就可以了,为什么要用 呢,给我们造成了多大的麻烦。其实这也不能怪windows。使用 的历史可以追溯到遥远的19世纪。 那时候发明的打字机主要结构是一个实心圆筒+排列成菊花状的字模。纸张被牢牢地固定在圆筒的表面上。当我们按下一个字母的时候,机械装置引动字模"飞"向纸张,同时圆筒前的色带升起,用力地印下去,于是纸张上面就出现一个字了。印完之后,机械装置自动地让圆筒向左移动一个字母格子,方便打印下一个字符。打完一行之后,左手边上有一个摇杆,摇一下,圆筒就可以滚动一个行距,这是换行。不过,因为打字的时候圆筒总会不断地向左移动,所以打字员还需要用力地把圆筒推回右边,这就是传说中的回车了。在计算机里常见的换行操作在打字机里需要换行+回车两个操作。自然,计算机里不用这么麻烦,不过windows喜欢看起来更兼容一点。于是换行就成了 了。

     

    解决方法

    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>vi filename 

    利用如下命令查看文件格式 
    :set ff 或 :set fileformat 

    可以看到如下信息 
    fileformat=dos 或 fileformat=unix 

    利用如下命令修改文件格式 
    :set ff=unix 或 :set fileformat=unix 

    :wq (存盘退出) 

    最后再执行文件 
    #sh>./filename 

     

  • 相关阅读:
    团队项目总结
    第二阶段团队绩效评分
    “转赚”------使用说明
    团队站立会议14
    团队站立会议13
    团队站立会议12
    团队站立会议11
    团队站立会议10
    LocalDate 今天是一年中的第几天?
    MAC系统Java环境搭建
  • 原文地址:https://www.cnblogs.com/python-way/p/6164510.html
Copyright © 2011-2022 走看看