Linux与Windows下Shebang的执行
起初是看到《Python编程:从入门到实践(第2版)》新增内容,本来是想试验一下Pyhton3.8 以上版本的 f 字符串功能,但过程中学到了各种各样的东西就记录一下。本片为第一篇 Shebang 相关的文章。
Shebang
Shebang 就是放在 .py 文件头的 #! /usr/bin/env python3.10
这一行,用来指定解释器的路径以及版本。
Linux
起初是没打算在电脑上装新版本 Python 的,所以借用的在线 Python 环境——谷歌的 Colaboratory(以下简称Colab) ,Colab提供的是 Ubuntu 环境。
Linux 下 Shebang 的执行并没有什么大问题。需要注意的有两件事,一个是行结尾的格式(实际上是 Colab 的问题);一个是执行文件时命令选择 ./<filiname>
而不是 python <filename>
。
以下为 Colab 上的操作流程:
首先安装 Pyhton3.10 和 dos2unix 。Colab 中保存的文件行结尾是
\r\n
格式,需要用 dos2unix 转换成 Unix 格式下的\n
。
!
是在Colab 中运行 bash 命令的前缀,和 Shebang 中的!
本质相同。
!apt install python3.10
!apt install dos2unix
建立一个名为 test.py 的文件,内容如下:
#! /usr/bin/env python3.10
#-*- coding: UTF-8 -*-
import sys
print(sys.version)
先用 dos2unix 转换文本格式。
执行文件时使用./test.py
指令,不要使用python test.py
。后者会先选择默认解释器,再打开文件,Shebang 行就无法发挥作用。
!dos2unix test.py
!./test.py
输出如下:
3.10.1 (main, Dec 21 2021, 18:59:49) [GCC 7.5.0]
Windows
2.1. 命令行运行
在 Windows 的 Shell 中可以直接输入 py <filename>
,Windows 下的 py
命令会先打开一个启动器,这个启动器在读到 #!usr/bin/env python
等格式的 Shebang 行时,并不会把 usr/bin/env
当作一个严格路径。
Pyhton 启动器 py.exe
将 #! /usr/bin/env python3.10
,#!py -3.10
,#!python3.10
等指令都视为可执行的虚拟命令,并由启动器管理打开的解释器版本。Python官方文档:Shebang Lines
注:在 Windows 的 shell 中,仅Windows Store 安装的 Python 版本支持命令
python3.10
。安装包版本下pyhton
命令不支持指定 Python 版本,仅支持启动器命令py -3.10
。
2.2. 编辑器运行
Windows 下的编辑器我用的是 VS Code,VS Code 下的 Python、Code Runner 插件都提供了代码运行功能。
Code Runner
Code Runner 插件目前无法识别 Linux 格式 Shebang。
解决方法一是禁用掉 Shebang,在设置中将 "code-runner.respectShebang"
设为 false
。
解决方法二是使用 Windows 命令行格式 Shebang,#!py -3.10
。
Pyhon插件
首先将设置中的默认解释器路径从 python 改为 py ("python.defaultInterpreterPath": "py"
),和 Linux 相同,python
指令会先选择解释器再执行文件,py
指令在 Windows 环境下会先打开启动器读取 Shebang 行。
然后按键Ctrl/Command + Shift + P打开 VS Code 命令,输入python.setInterpreter
,选择 【Python:选择解释器】->【<当前工作区名称>】->【使用默认Pyhton解释器路径】(应显示为 py
)。
Python 插件同时支持 Linux 和 Windows 格式的 Shebang:#! /usr/bin/env python3.10
,#!py -3.10
。
注:本质上, VS Code 两个插件的区别在于:Code Runner 插件实际上是先将 Shebang 行交给了 shell 运行,因而仅支持 Windows 下 shell 可识别的命令;
而 Python 插件是先打开启动器py.exe
(通过设置),将 Shebang 行(以及整个文本)交给了启动器运行。
Linux与Windows下Shebang的执行相关推荐
- Linux和Windows下部署BeetleX服务网关
有朋友希望写一篇BeetleX服务网关部署到Linux和windows下并以服务的方式运行的介绍文章.接下详细介绍如何做并简单介绍一下网的使用.首先需要在官网(beetlex-io.com)下载对应版 ...
- 从Docker在Linux和Windows下的区别简单理解Docker的层次结构
上篇文章我们成功在Windows下安装了Docker,输出了一个简单的Hello World程序.本文中我们将利用Docker已有的云端镜像training/webapp来发布一个简单Python的W ...
- VLC-3.0.0(Nightly版)在Linux和Windows下的编译步骤详解
VLC 3.0.0 Compile vlc的编译一直是个大坑,做过音视频开发的不少人想必都踩过,开篇引用官方wiki一句话: Compiling VLC is not an easy task. 本文 ...
- linux编译c如何延时,linux和windows下,C/C++开发的延时函数,sleep函数
简介: 函数名: sleep 功 能: 执行挂起一段时间 用 法: unsigned sleep(unsigned seconds); 在VC中使用带上头文件 #include 在gcc编译器中,使用 ...
- windows4t硬盘Linux分区工具,linux挂载windows下的硬盘分区
linux挂载windows下的硬盘分区 (2009-10-18 12:37:56) 标签: 电脑 windows linux 硬盘分区 sda it 在linux下挂载windows分区 想随时随地 ...
- linux 访问windows 端口,Linux和Windows下查看端口详解
Linux和Windows下查看端口详解 我们常会在计算机上安装很多软件,如果喜欢冲浪的话,必然就会用的软件的通信,当然包括web开发的,应用多了,难免会要不小心占用端口的问题,这时候用命令来处理是最 ...
- linux 创建线程函数吗,[笔记]linux下和windows下的 创建线程函数
linux下和windows下的 创建线程函数 #ifdef __GNUC__ //Linux #include #define CreateThreadEx(tid,threadFun,args) ...
- windows下bat处理执行Mysql的sql语句
这篇文章主要介绍了windows下bat批处理执行Mysql的sql语句,需要的朋友可以参考下 有时候我们需要用bat来定时执行mysql那么就可以参考下面的代码 直接上代码: @ECHO OFF S ...
- linux与windows下开发,Linux 与 Windows下开发感受
Linux 和 Windows环境下开发各有优点.以下Linux 下使用感受是在Ubuntu11.04,别的发行版还没试过. 至于各自的缺点,都可以通过各种方法,得到或多或少地解决.至于要花费多大的精 ...
最新文章
- [Share]10 Free EBooks for Web Designers
- 计算机网络:三层ISP结构
- 获取不到app.config里面的数据库连接字符串的解决方法
- 一些linux知识和http知识
- webpack devserver配置_在webpack中使用babel
- 微信支付携手云闪付APP上线支付立减新优惠
- 0顶会入场大厂算法岗的正确姿势(干货总结)
- 博客园是否提供trackback的rss
- “现有人工智能都是二流的”
- 1.Tow Sum(两数和)
- 今晚8:00 | 杜克大学计算进化智能中心(CEI Lab)—— 联邦学习专题!
- Butterworth低通滤波器
- 记录一下把域名从阿里云服务商转入到华为云
- uniapp小程序 安卓和ios时间兼容性问题解决方案
- excel能和html链接吗,非常棒的 Excel 超链接功能可以跳转到网址和邮箱等
- mysql 表结构的复制
- 2021“载歌在谷”线上春晚震撼来袭!
- Windows服务器怎么才能长时间保持远程桌面不自动断开
- 华为云面试指南—Rainbow
- 轮播图实现方法一——层叠轮播图