当前位置:首页 > 科技  > 软件

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

来源: 责编: 时间:2023-10-26 17:12:43 602观看
导读哈喽大家好,我是咸鱼我们知道,python 脚本或者说 python 程序其实是一个包含了 python 代码的文件。要让它们实现特定功能,我们需要知道该如何运行(run)它通过运行 python 代码,我们可以验证脚本/程序是否按照我们的期望执

哈喽大家好,我是咸鱼CLM28资讯网——每日最新资讯28at.com

我们知道,python 脚本或者说 python 程序其实是一个包含了 python 代码的文件。要让它们实现特定功能,我们需要知道该如何运行(run)它CLM28资讯网——每日最新资讯28at.com

通过运行 python 代码,我们可以验证脚本/程序是否按照我们的期望执行。这也使我们能够对其进行测试和调试,以便找到并修复潜在的 bugCLM28资讯网——每日最新资讯28at.com

在 python 中有多种方式来运行脚本或程序,取决于小伙伴们的需求和偏好,毕竟萝卜青菜各有所爱CLM28资讯网——每日最新资讯28at.com

接下来,咸鱼将介绍几种常见的 python 代码运行方式CLM28资讯网——每日最新资讯28at.com

脚本和模块

在计算机术语中,脚本(scripts)是指一个包含逻辑顺序的文本文件,我们可以运行脚本来完成特定任务CLM28资讯网——每日最新资讯28at.com

这些逻辑顺序通常用脚本语言(scripting language)表示,脚本语言是一种编程语言,允许我们操作、定制或自动化任务CLM28资讯网——每日最新资讯28at.com

脚本语言通常在运行时(runtime)解释,而不是在编译(compiled)时。所以脚本通常由某种解释器运行,解释器的工作就是按顺序执行脚本中的代码CLM28资讯网——每日最新资讯28at.com

python 就是一门解释型语言。一般来讲 python 代码被称为脚本(或者在更复杂的应用程序中称为入口点脚本)CLM28资讯网——每日最新资讯28at.com

另一方面,包含 python 代码的文件(例如 A.py )可以被另一个 python 文件(例如 B.py )导入和使用,这种文件(A.py )就被称为模块(module)CLM28资讯网——每日最新资讯28at.com

即模块和脚本的主要区别在于——模块存储可导入(Importable )的代码,脚本存储可执行(executable )的代码CLM28资讯网——每日最新资讯28at.com

可导入代码是定义了某些内容但不执行特点操作的代码(例如函数或类的定义)CLM28资讯网——每日最新资讯28at.com

可执行代码是执行某些特定操作的代码(例如函数的调用、循环、条件判断等)CLM28资讯网——每日最新资讯28at.com

命令行运行

在 python 编程中,我们可以以纯文本文件来编写 python 程序。需要注意的是,包含 python 代码的文件用 .py 做后缀名CLM28资讯网——每日最新资讯28at.com

首先我们创建一个 python 脚本 hello.py CLM28资讯网——每日最新资讯28at.com

图片图片CLM28资讯网——每日最新资讯28at.com

  • 使用 python 命令

以 Windows 为例,我们需要打开 Windows 终端(win + R 然后输入 cmd),然后敲入下面的命令CLM28资讯网——每日最新资讯28at.com

图片图片CLM28资讯网——每日最新资讯28at.com

在 Windows 中,我们还可以使用 py 命令,这个命令会触发控制台应用程序的 py.exe 启动器CLM28资讯网——每日最新资讯28at.com

在某些 Linux 发行版中,可能需要使用 python3 命令,而不是简单的 pythonCLM28资讯网——每日最新资讯28at.com

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

图片图片CLM28资讯网——每日最新资讯28at.com

在上面的命令中,> 表示将输出(即 python 脚本的执行结果 hello world!) 重定向到 output.txt 文件中,而不是标准输出到屏幕中CLM28资讯网——每日最新资讯28at.com

如果 output.txt 不存在,系统会自动创建它,如果存在:CLM28资讯网——每日最新资讯28at.com

  • > :覆盖
  • >> :追加
  • 直接使用脚本的文件名

以 Windows 为例,我们可以直接使用脚本的文件名来执行脚本CLM28资讯网——每日最新资讯28at.com

图片图片CLM28资讯网——每日最新资讯28at.com

如果是 Linux,需要先给脚本赋可执行权限,否则很有可能报【没有权限】的错误CLM28资讯网——每日最新资讯28at.com

图片图片CLM28资讯网——每日最新资讯28at.com

赋权之后,hello.py 将可执行,但是还不一定能够正常运行CLM28资讯网——每日最新资讯28at.com

图片图片CLM28资讯网——每日最新资讯28at.com

为什么会有这个报错,是因为操作系统不知道使用哪个程序去执行这个脚本,并尝试使用 shell 去运行它CLM28资讯网——每日最新资讯28at.com

所以我们需要在脚本中添加一个 shebang 行CLM28资讯网——每日最新资讯28at.com

图片图片CLM28资讯网——每日最新资讯28at.com

关于什么是 shebang 行,请看我这篇文章:《关于 Bash 脚本中 Shebang 的趣事》CLM28资讯网——每日最新资讯28at.com

添加 shebang 行之后,运行CLM28资讯网——每日最新资讯28at.com

图片图片CLM28资讯网——每日最新资讯28at.com

  • 使用 -m 选项运行 python 模块

图片图片CLM28资讯网——每日最新资讯28at.com

-m 会在 python 的模块搜索路径、sys.path 中搜索模块名称并运行对应内容CLM28资讯网——每日最新资讯28at.com

图片图片CLM28资讯网——每日最新资讯28at.com

图片图片CLM28资讯网——每日最新资讯28at.com

上面的例子中,把 hello.py 文件作为模块来运行。需要注意的是,<module-name> 是模块的名称,而不是文件名(即不包含 .py 后缀)CLM28资讯网——每日最新资讯28at.com

交互式运行

前面我们知道,python 是一门解释型语言,执行 python 脚本的时候解释器会按顺序把 python 代码解释成机器语言CLM28资讯网——每日最新资讯28at.com

所以我们可以通过解释器以交互方式运行代码CLM28资讯网——每日最新资讯28at.com

严谨点来讲,python 这个名字指的是一个叫做解释器的软件CLM28资讯网——每日最新资讯28at.com

  • python 解释器

解释器是在你的程序和计算机硬件之间工作的一层软件,能够使你的代码运行CLM28资讯网——每日最新资讯28at.com

根据你使用的python实现,解释器可以是一个用以下代码编写的程序:CLM28资讯网——每日最新资讯28at.com

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

想了解更多 python 实现的原理以及其他 python 实现,可以看我这篇文章:CPython, Pypy, MicroPython...还在傻傻分不清楚?CLM28资讯网——每日最新资讯28at.com

无论使用哪种解释器,我们编写的代码都将在上面运行,所以能够运行脚本和代码的第一个条件就是正确安装解释器CLM28资讯网——每日最新资讯28at.com

python 解释器可以在两种不同的模式下运行代码:CLM28资讯网——每日最新资讯28at.com

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

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

  • python 的 REPL 运行代码

REPL(Read Eval Print Loop)。它表示一个循环中,在这个循环中不断的执行:CLM28资讯网——每日最新资讯28at.com

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

交互式会话是用于运行 python 代码的广泛使用的工具。若要启动 python 交互式会话 (REPL),请打开命令行窗口,键入 python 命令CLM28资讯网——每日最新资讯28at.com

交互模式的标准主提示符由三个右尖括号 >>>,以 Windows 为例CLM28资讯网——每日最新资讯28at.com

Linux 系统Linux 系统CLM28资讯网——每日最新资讯28at.com

图片图片CLM28资讯网——每日最新资讯28at.com

标准 REPL 还具有由三个句点 ( ) 组成的辅助提示符 ... 。在复合语句(如条件、函数和类定义以及循环)添加缩进行时,会出现此提示CLM28资讯网——每日最新资讯28at.com

图片图片CLM28资讯网——每日最新资讯28at.com

一旦启动了 REPL 会话,就可以按照自己的意愿编写和运行 python 代码。唯一的缺点是:当关闭会话时,代码将消失CLM28资讯网——每日最新资讯28at.com

这是脚本模式和交互模式之间的一个区别——脚本是持久的CLM28资讯网——每日最新资讯28at.com

我们以交互方式执行 python 代码时,python 会立即计算并执行每个表达式和语句CLM28资讯网——每日最新资讯28at.com

图片图片CLM28资讯网——每日最新资讯28at.com

从 Python 代码中运行CLM28资讯网——每日最新资讯28at.com

  • import 语句

当我们从另一个模块、脚本或交互式会话导入模块时,python 会加载其中的内容供以后访问和使用CLM28资讯网——每日最新资讯28at.com

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

图片图片CLM28资讯网——每日最新资讯28at.com

多次执行 import 语句我们可以发现:每个会话只会运行一次模块中的代码CLM28资讯网——每日最新资讯28at.com

图片图片CLM28资讯网——每日最新资讯28at.com

首次导入模块之后,后面我们即使修改了模块的内容,连续导入也不会执行任何操作,这是因为 import 操作成本很高,python 会采取一些额外的措施来优化整体性能CLM28资讯网——每日最新资讯28at.com

对于上面的例子,python 知道 hello 模块已经导入。因此,python 会跳过下面的重复导入语句CLM28资讯网——每日最新资讯28at.com

  • importlib

importlib 是 python 标准库中的一个模块,我们可以通过importlib 以编程的方式导入模块CLM28资讯网——每日最新资讯28at.com

使用 import_module() ,可以模拟 import 操作,从而执行任何模块或脚本CLM28资讯网——每日最新资讯28at.com

图片图片CLM28资讯网——每日最新资讯28at.com

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

前面我们提到过,导入的时候 python 只会执行一次模块中的代码,之后的导入是不会执行的CLM28资讯网——每日最新资讯28at.com

如果你想重新加载模块并再次运行其中的代码,可以使用 reload() 函数,它会强制解释器再次导入CLM28资讯网——每日最新资讯28at.com

图片图片CLM28资讯网——每日最新资讯28at.com

  • exec() 函数

除此之外,我们还可以使用内置 exec() 函数来执行CLM28资讯网——每日最新资讯28at.com

图片图片CLM28资讯网——每日最新资讯28at.com

IDE / 代码编辑器运行

为了开发大型和复杂的应用程序,我们应该使用集成开发环境(IDE)或高级文本编辑器CLM28资讯网——每日最新资讯28at.com

这些程序中的大多数都有一些选项,允许我们在环境本身内部运行程序。它们通常包含 Run 或 Build 操作,这通常可以从工具栏或主菜单中获得。CLM28资讯网——每日最新资讯28at.com

图片图片CLM28资讯网——每日最新资讯28at.com

原文:https://realpython.com/run-python-scripts/CLM28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-15241-0.html运行 Python 脚本/代码的几种方式

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 挑战来了!如何应对大商家订单多小商家没有订单的数据倾斜问题?

下一篇: 聊聊wireshark的进阶使用功能

标签:
  • 热门焦点
  • 卢伟冰长文解析K60至尊版 对Redmi有着里程碑式的意义

    在今天的Redmi后性能时代战略发布会结束之后,Redmi总经理卢伟冰又带来了一篇长文,详解了为什么 Redmi 要开启后性能时代?为什么选择和 MediaTek、Pixelworks 深度合作?以及后性
  • 对标苹果的灵动岛 华为带来实况窗功能

    继苹果的灵动岛之后,华为也在今天正式推出了“实况窗”功能。据今天鸿蒙OS 4.0的现场演示显示,华为的实况窗可以更高效的展现出实时通知,比如锁屏上就能看到外卖、打车、银行
  • 小米降噪蓝牙耳机Necklace分享:听一首歌 读懂一个故事

    在今天下午的小米Civi 2新品发布会上,小米还带来了一款新的降噪蓝牙耳机Necklace,我们也在发布结束的第一时间给大家带来这款耳机的简单分享。现在大家能见到最多的蓝牙耳机
  • 6月安卓手机性能榜:vivo/iQOO霸占旗舰排行榜前三

    2023年上半年已经正式过去了,我们也迎来了安兔兔V10版本,在新的骁龙8Gen3和天玑9300发布之前,性能榜的榜单大体会以骁龙8Gen2和天玑9200+为主,至于那颗3.36GHz的骁龙8Gen2领先
  • 多线程开发带来的问题与解决方法

    使用多线程主要会带来以下几个问题:(一)线程安全问题  线程安全问题指的是在某一线程从开始访问到结束访问某一数据期间,该数据被其他的线程所修改,那么对于当前线程而言,该线程
  • .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 讲故事上个月我写过一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,当时用的是 GDIView + WinDbg 把问题搞定,前者用来定位泄露资源,后者用来定位泄露代码,后面有朋友反
  • 虚拟键盘 API 的妙用

    你是否在遇到过这样的问题:移动设备上有一个固定元素,当激活虚拟键盘时,该元素被隐藏在了键盘下方?多年来,这一直是 Web 上的默认行为,在本文中,我们将探讨这个问题、为什么会发生
  • 小米MIX Fold 3配置细节曝光:搭载领先版骁龙8 Gen2+罕见5倍长焦

    这段时间以来,包括三星、一加、荣耀等等有不少品牌旗下的最新折叠屏旗舰都得到了不少爆料,而小米新一代折叠屏旗舰——小米MIX Fold 3此前也屡屡被传
  • iQOO Neo8 Pro真机谍照曝光:天玑9200+和V1+旗舰双芯加持

    去年10月,iQOO推出了iQOO Neo7系列机型,不仅搭载了天玑9000+,而且是同价位唯一一款天玑9000+直屏旗舰,一经上市便受到了用户的广泛关注。在时隔半年后,
Top