美文网首页
Windows下Python3脚本传到Linux下./examp

Windows下Python3脚本传到Linux下./examp

作者: robot_test_boy | 来源:发表于2021-11-18 00:34 被阅读0次

    1. 背景

    大多数情况下通过pycharm编写Python代码,编写调试完,到Linux下发布执行。

    以example.py脚本为例

    #! /usr/bin/env python3
    #! -*- encoding: utf-8 -*-
    def test(x,y):
        x=int x
        y=int y
        c=x+y
        return c
    if _name_=="__main__":
        print(test(2,6)

    在Linux下执行python3 example.py成功但./example.py执行报错。

    偶然发现vi example.py打开文件,底部会显示这个文件是dos格式的。

    突然想起来,windows和Linux下文件的换行符不一样。

    使用dos2unix工具转换下./example.py可以执行了。

    2. 疑惑

    Windows下Python3脚本传到Linux下,为什么python3 example.py成功?./example.py执行报错?

    3. 分析

    先看下python3 example.py执行,指定Python3解释器,猜测下Python3能在Linux下执行Windows的Python脚本,也就是说Python3解释器自动将dos下换行符(/r/n)转换或解析为unix下换行符(/r)。

    ./example.py执行,是根据文件开头指定的Python解释器来执行(#! /usr/bin/env  python3)。在指定解释器前,要先能够识别这个文件的换行符,此次执行失败就是换行符搞的鬼。

    做个实验:仅仅把(#! /usr/bin/env  python3)这一行在Linux下删除后,重新编写,并换行。再次执行验证是否可行。

    实验失败了。

    有两点结论:

    1) 文件换行符是dos还是unix,是以文件为粒度的,不是某一行来决定的。

    这一点可以知道,./example.py执行是操作系统先识别文件换行符,才能调用Python解释器。

    2) Python3 example.py是不需要操作系统来识别文件换行符,直接Python解释器来处理。

    相关文章

      网友评论

          本文标题:Windows下Python3脚本传到Linux下./examp

          本文链接:https://www.haomeiwen.com/subject/ztwozltx.html