当前位置: 首页 > news >正文

Windows下Python3脚本传到Linux下./example.py执行失败

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解释器来处理。



喜欢的朋友记得点赞、收藏、关注哦!!!

相关文章:

  • AdaBoost算法详解:原理、实现与应用指南
  • 极简GIT使用
  • 补4月30日
  • 常见电源的解释说明
  • C#泛型集合深度解析(九):掌握System.Collections.Generic的核心精髓
  • RTOS接口-Semaphores
  • ADG网络故障恢复演练
  • 实现了一个基于寄存器操作STM32F103C8t6的工程, 并实现对PA1,PA2接LED正极的点灯操作
  • 如何提升个人的稳定性?
  • 蓝桥杯比赛
  • 基于BERT类的MRPC语义相似度检测(从0到-1系列)
  • 机箱结构的EMC设计
  • 5月1日日记
  • Window通过虚拟机17安装Ubuntu20.04并安装相关的插件(胎教级教程)
  • 进程与线程:04 内核线程
  • 2025年4月文章一览
  • 杜邦分析法
  • 实验五 完整性
  • openEuler 22.03 安装 Mysql 5.7,TAR离线安装
  • Java 基础--数组(Array):存储数据的“排排坐”
  • 特朗普称加总理将很快访美,白宫:不影响将加拿大打造成“第51个州”计划
  • 夜读丨春天要去动物园
  • 4月制造业PMI为49%,比上月下降1.5个百分点
  • 国有六大行一季度合计净赚超3444亿,不良贷款余额均上升
  • 习近平就伊朗发生严重爆炸事件向伊朗总统佩泽希齐扬致慰问电
  • 文天祥与“不直人间一唾轻”的元将唆都