运行 Python 脚本/代码的几种方式

news2024/12/24 2:00:31

哈喽大家好,我是咸鱼

我们知道,python 脚本或者说 python 程序其实是一个包含了 python 代码的文件。要让它们实现特定功能,我们需要知道该如何运行(run)它

通过运行 python 代码,我们可以验证脚本/程序是否按照我们的期望执行。这也使我们能够对其进行测试和调试,以便找到并修复潜在的 bug

在 python 中,有多种方式来运行脚本或程序,取决于小伙伴们的需求和偏好,毕竟萝卜青菜各有所爱

接下来,咸鱼将介绍几种常见的 python 代码运行方式

原文:https://realpython.com/run-python-scripts/

脚本和模块

在计算机术语中,脚本(scripts)是指一个包含逻辑顺序的文本文件,我们可以运行脚本来完成特定任务

这些逻辑顺序通常用脚本语言(scripting language)表示,脚本语言是一种编程语言,允许我们操作、定制或自动化任务

脚本语言通常在运行时(runtime)解释,而不是在编译(compiled)时。所以脚本通常由某种解释器运行,解释器的工作就是按顺序执行脚本中的代码

python 就是一门解释型语言。一般来讲 python 代码被称为脚本(或者在更复杂的应用程序中称为入口点脚本)

另一方面,包含 python 代码的文件(例如 A.py )可以被另一个 python 文件(例如 B.py )导入和使用,这种文件(A.py )就被称为模块(module)

模块和脚本的主要区别在于——模块存储可导入(Importable )的代码,脚本存储可执行(executable )的代码

可导入代码是定义了某些内容但不执行特点操作的代码(例如函数或类的定义)

可执行代码是执行某些特定操作的代码(例如函数的调用、循环、条件判断等)

命令行运行

在 python 编程中,我们可以以纯文本文件来编写 python 程序。需要注意的是,包含 python 代码的文件用 .py 做后缀名

首先我们创建一个 python 脚本 hello.py

# hello.py

print("Hello, World!")
  • 使用 python 命令

以 Windows 为例,我们需要打开 Windows 终端(win + R 然后输入 cmd),然后敲入下面的命令

# 相对路径
>>> python .\hello.py
Hello, World!

>>> py .\hello.py
Hello, World!

# 绝对路径
>>> python D:\python\hello.py
Hello, World!

>>> py D:\python\hello.py
Hello, World!

在 Windows 中,我们还可以使用 py 命令,这个命令会触发控制台应用程序的 py.exe 启动器

在某些 Linux 发行版中,可能需要使用 python3 命令,而不是简单的 python

终端或 shell 运行 python 脚本还有一个很酷的功能就是:可以使用重定向将 python 执行结果输出到某个文件中,方便我们将结果保存下来并对其分析

>>> python D:\python\hello.py > D:\python\output.txt

在上面的命令中,> 表示将输出(即 python 脚本的执行结果 hello world!) 重定向到 output.txt 文件中,而不是标准输出到屏幕中

如果 output.txt 不存在,系统会自动创建它,如果存在:

  • > :覆盖

  • >> :追加

  • 直接使用脚本的文件名

以 Windows 为例,我们可以直接使用脚本的文件名来执行脚本

# 绝对路径
>>> D:\python\hello.py

# 相对路径
>>> .\hello.py

如果是 Linux,需要先给脚本赋可执行权限,否则很有可能报【没有权限】的错误

chmod +x hello.py

赋权之后,hello.py 将可执行,但是还不一定能够正常运行
在这里插入图片描述
为什么会有这个报错,是因为操作系统不知道使用哪个程序去执行这个脚本,并尝试使用 shell 去运行它

所以我们需要在脚本中添加一个 shebang 行

[root@localhost ~]# vim /hello.py
#!/usr/bin/env python3

print("Hello, World!")

关于什么是 shebang 行,请看我这篇文章:关于 Bash 脚本中 Shebang 的趣事

添加 shebang 行之后,运行

在这里插入图片描述

  • 使用 -m 选项运行 python 模块
# 语法
python -m <module-name>

-m 会在 python 的模块搜索路径、sys.path 中搜索模块名称并运行对应内容

# Linux 为例
# 执行命令的时候最好跟 hello.py 在同一层级目录中
[root@localhost ~]# python -m hello

在这里插入图片描述
上面的例子中,把 hello.py 文件作为模块来运行。需要注意的是,<module-name> 是模块的名称,而不是文件名(即不包含 .py 后缀)

交互式运行

前面我们知道,python 是一门解释型语言,执行 python 脚本的时候解释器会按顺序把 python 代码解释成机器语言

所以我们可以通过解释器以交互方式运行代码

严谨点来讲,python 这个名字指的是一个叫做解释器的软件

  • python 解释器

解释器是在你的程序和计算机硬件之间工作的一层软件,能够使你的代码运行

根据你使用的python实现,解释器可以是一个用以下代码编写的程序:

  • C:像 Cpython,是最常用的一种实现
  • python 本身:如PyPy,它是一个带有即时(JIT)编译器的快速实现
  • java:Jython,可以利用 Java 生态

想了解更多 python 实现的原理以及其他 python 实现,可以看我这篇文章:Cpython, Pypy, MicroPython…还在傻傻分不清楚?

无论使用哪种解释器,我们编写的代码都将在上面运行,所以能够运行脚本和代码的第一个条件就是正确安装解释器

python 解释器可以在两种不同的模式下运行代码:

  • 脚本或程序
  • 交互式或 REPL(Read-Eval-Print Loop)

在脚本模式下,我们可以使用解释器将源文件(.py)作为可执行程序去运行;交互模式是你启动解释器并使用它作为一个平台来运行你直接输入的代码

  • python 的 REPL 运行代码

REPL(Read Eval Print Loop)。它表示一个循环中,在这个循环中不断的执行:

  • Read,读取用户输入
  • Eval, 执行输入内容
  • Print,打印输出结果
  • Loop, 不断循环以上步骤
Read -> Eval -> Print -> Read -> Eval
-> Print -> Read -> Eval -> Print -> ...

交互式会话是用于运行 python 代码的广泛使用的工具。若要启动 python 交互式会话 (REPL),请打开命令行窗口,键入 python 命令

交互模式的标准主提示符由三个右尖括号 >>>,以 Windows 为例
在这里插入图片描述
Linux 系统
在这里插入图片描述
标准 REPL 还具有由三个句点 ( ) 组成的辅助提示符 ... 。在复合语句(如条件、函数和类定义以及循环)添加缩进行时,会出现此提示

>>> for i in range(0,10):
...     print(i)

一旦启动了 REPL 会话,就可以按照自己的意愿编写和运行 python 代码。唯一的缺点是:当关闭会话时,代码将消失

这是脚本模式和交互模式之间的一个区别——脚本是持久的

我们以交互方式执行 python 代码时,python 会立即计算并执行每个表达式和语句
在这里插入图片描述

从 python 代码中运行

  • import 语句

当我们从另一个模块、脚本或交互式会话导入模块时,python 会加载其中的内容供以后访问和使用

如果被导入模块只有类、函数、变量常量的定义时,我们往往不会意识到代码其实已经运行了,如果被导入模块里面有生成可见结果的函数、方法或其他语句的调用时,我们就能看到在导入的时候已经执行了

>>> import hello
Hello, World!

多次执行 import 语句我们可以发现:每个会话只会运行一次模块中的代码
在这里插入图片描述
首次导入模块之后,后面我们即使修改了模块的内容,连续导入也不会执行任何操作,这是因为 import 操作成本很高,python 会采取一些额外的措施来优化整体性能

对于上面的例子,python 知道 hello 模块已经导入。因此,python 会跳过下面的重复导入语句

  • importlib

importlib 是 python 标准库中的一个模块,我们可以通过importlib 以编程的方式导入模块

使用 import_module() ,可以模拟 import 操作,从而执行任何模块或脚本

>>> import importlib
>>> importlib.import_module("hello")
Hello, World!
<module 'hello' from '/root/hello.py'>

import_module()函数导入一个模块,把模块名字放到当前的命名空间中。它还运行目标模块包含的任何可执行代码。这就是为什么你会得到 Hello, World! 在你的屏幕上

前面我们提到过,导入的时候 python 只会执行一次模块中的代码,之后的导入是不会执行的

如果你想重新加载模块并再次运行其中的代码,可以使用 reload() 函数,它会强制解释器再次导入

>>> import hello
Hello World!

>>> import importlib
>>> importlib.reload(hello)
Hello World!
<module 'hello' from '/root/hello.py'>
  • exec() 函数

除此之外,我们还可以使用内置 exec() 函数来执行

>>> with open("hello.py") as hello:
...     exec(hello.read())
...
Hello, World!

我们首先打开 hello.py 文件,然后读取文件内容,再把内容传递给 exec() 函数

IDE / 代码编辑器运行

为了开发大型和复杂的应用程序,我们应该使用集成开发环境(IDE)或高级文本编辑器

这些程序中的大多数都有一些选项,允许我们在环境本身内部运行程序。它们通常包含 Run 或 Build 操作,这通常可以从工具栏或主菜单中获得。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1133311.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (三)

这是继之前文章&#xff1a; Elasticsearch&#xff1a;使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation &#xff08;一&#xff09; Elasticsearch&#xff1a;使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation &#xff08;二&…

JAVA设计模式详解(独家AI解析)

JAVA设计模式详解&#xff08;独家AI解析&#xff09; 一、JAVA介绍二、JAVA设计模式六大原则三、JAVA设计模式介绍四、JAVA设计模式详解4.1 单例模式4.1.1 懒汉式&#xff08;Lazy Initialization&#xff09;4.1.2 饿汉式&#xff08;Lazy Initialization&#xff09; 4.2 代…

本地化ddddocr库,完成验证码图片识别,完整流程

1.pycharm-3.8环境&#xff0c;代码&#xff0c;ddddocr库&#xff0c;以及测试图片 2.代码&#xff1a; import ddddocr ocr ddddocr.DdddOcr(oldTrue) with open("1.jpg", rb) as f:image f.read() res ocr.classification(image) print(res)3.完整打包&#…

sheng的学习笔记-【中】【吴恩达课后测验】Course 3 - 结构化机器学习项目 - 第二周测验

课程3_第2周_测验题 目录&#xff1a;目录 要解决的问题 ① 为了帮助你练习机器学习的策略&#xff0c;本周我们将介绍另一个场景&#xff0c;并询问你将如何行动。 ② 我们认为这个在机器学习项目中工作的“模拟器”将给出一个任务&#xff0c;即领导一个机器学习项目可能…

教师必备宝藏,强烈推荐

亲爱的教师朋友们&#xff0c;你们是不是在为学期末成绩查询而头疼呢&#xff1f;一学期下来&#xff0c;成堆的试卷和成绩单&#xff0c;还有学生家长的各种咨询&#xff0c;让人应接不暇。现在&#xff0c;我给你们分享一个教师必备的宝藏&#xff0c;让你们的成绩查询工作变…

Mac虚拟机哪个好用,CrossOver23.6虚拟机激活许可证激活码2023最新分享

刚买了苹果电脑的用户&#xff0c;经常会因为用不惯苹果系统而想换Windows系统&#xff0c;实际上也的确是&#xff0c;许多流行游戏或软件都暂不支持Mac系统&#xff0c;可行的办法是安装Mac虚拟机或是双系统&#xff0c;以供支持在苹果电脑上使用Windows应用。下面本文就来讲…

小程序如何设置自取规则

​在小程序中&#xff0c;自取规则是指当客户下单时选择无需配送的情况下&#xff0c;如何设置相关的计费方式、指定时段费用、免费金额、预定时间和起取金额。下面将详细介绍如何设置这些规则&#xff0c;以便更好地满足客户的需求。 在小程序管理员后台->配送设置->自…

JavaScript进阶 第二天笔记

JavaScript 进阶 - 第2天 了解面向对象编程的基础概念及构造函数的作用&#xff0c;体会 JavaScript 一切皆对象的语言特征&#xff0c;掌握常见的对象属性和方法的使用。 了解面向对象编程中的一般概念能够基于构造函数创建对象理解 JavaScript 中一切皆对象的语言特征理解引用…

Vue中的加密方式(js-base64、crypto-js、jsencrypt、bcryptjs)

目录 1.安装js-base64库 2. 在Vue组件中引入js-base64库 3.使用js-base64库进行加密 4.Vue中其他加密方式 1.crypto-js 2.jsencrypt 3.bcryptjs 1.安装js-base64库 npm install js-base64 --save-dev 2. 在Vue组件中引入js-base64库 import { Base64 } from js-ba…

springboot操作nosql的mongodb,或者是如何在mongodb官网创建服务器并进行操作

第一步&#xff1a;在mongodb的官网里面创建云服务器 点进去 这是免费的&#xff0c;由于是一个项目只可以创建一个&#xff0c;这里我已经创建好了 用本地的mongodb服务也是可以的 第二步&#xff1a;点击connect,下载连接mongodb的软件&#xff1a;MongoDBCompass 第三步&am…

钉钉小程序生态6—钉钉OA自定义审批流的创建和使用

文章导航 钉钉小程序生态1—区分企业内部应用、第三方企业应用、第三方个人应用 钉钉小程序生态2—区分小程序和H5微应用 钉钉小程序生态3—钉钉扫码登录PC端网站 钉钉小程序生态4—钉钉小程序三方企业应用事件与回调 钉钉小程序生态5—钉钉群机器人消息通知和钉钉工作通知 钉…

【嵌入式开发学习】__单片机中容易造成内存泄露的几个痛点

目录 前言 一、程序运行 二、什么是内存泄露&#xff1f; 三、内存泄露的严重后果&#xff01; 四、如何定位到泄露的要点&#xff1f; 五、三大痛点 1. 访问越界 2. 栈 3. 堆 六、泄露常见的场景 1. 重新赋值 2. 首先释放父块 3. 返回值的不正确处理 七、常见的…

无监督学习-K-means

1、 什么是无监督学习 一家广告平台需要根据相似的人口学特征和购买习惯将美国人口分成不同的小组&#xff0c;以便广告客户可以通过有关联的广告接触到他们的目标客户。Airbnb 需要将自己的房屋清单分组成不同的社区&#xff0c;以便用户能更轻松地查阅这些清单。一个数据科学…

账号运营的底层逻辑---获客思维

什么是运营&#xff1f; 运营是做什么的&#xff1f; 什么是内容运营&#xff1f; 什么是活动运营&#xff1f; 一篇带你搞清楚所有的底层逻辑&#xff01;

三、W5100S/W5500+RP2040树莓派Pico<TCP Client数据回环测试>

文章目录 1. 前言2. 协议简介2.1 简述2.2 优点2.3 应用 3. WIZnet以太网芯片4. TCP Client数据回环测试4.1 程序流程图4.2 测试准备4.3 连接方式4.4 相关代码4.5 测试现象 5. 注意事项6. 相关链接 1. 前言 在当今的计算机网络环境中&#xff0c;TCP&#xff08;传输控制协议&am…

整理指定文件夹下的所有文件,以类树状图显示并生成对应超链接

最近在整理家里学习资料的时候&#xff0c;由于年代久远&#xff0c;找不到我想要找的文件&#xff0c;windows文件搜索速度感觉太慢。于是想要生成一份类似文件索引的东西来显示所有资料&#xff0c;让我可以快速的找到需要的资料路径 直接上代码 import os import datetim…

基于Java的医院远程预约管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

2、Linux权限理解

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 前言 Linux权限的概念 1.文件访问者的分(人) 2.文件类型和访问权限(事物属性) 3.文件权限值的表示方法 4.文件访问权限的相关设置方法 file指令 目录的权限 粘滞位 关于权限的总结 前言 在开始Linux权限理…

IDEA: 自用主题及字体搭配推荐

文章目录 1. 字体设置推荐2. 主题推荐3. Rainbow Brackets(彩虹括号)4. 设置背景图片 下面是我的 IDEA 主题和字体&#xff0c;它们的搭配效果如下&#xff1a; 1. 字体设置推荐 在使用 IntelliJ IDEA 进行编码和开发时&#xff0c;一个合适的字体设置可以提高你的工作效率和舒…

Python---for循环中的两大关键字break和continue

之前在while循环中&#xff0c;也是用到两个关键字。 相关链接&#xff1a; 所以&#xff0c;在循环结构中都存在两个关键字&#xff1a;break和continue break&#xff1a;主要功能是终止整个循环 break&#xff1a;代表终止整个循环结构 continue&#xff1a;代表中止当…