找回密码
 会员注册
查看: 32|回复: 0

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

[复制链接]

6

主题

0

回帖

19

积分

新手上路

积分
19
发表于 2024-9-13 14:24:21 | 显示全部楼层 |阅读模式
我们知道,python脚本或者说python程序其实是一个包含了python代码的文件。要让它们实现特定功能,我们需要知道该如何运行(run)它通过运行python代码,我们可以验证脚本/程序是否按照我们的期望执行。这也使我们能够对其进行测试和调试,以便找到并修复潜在的bug在python中,有多种方式来运行脚本或程序,取决于小伙伴们的需求和偏好,接下来,介绍几种常见的python代码运行方式。python脚本实战项目无偿分享(在下方):脚本和模块在计算机术语中,脚本(scripts)是指一个包含逻辑顺序的文本文件,我们可以运行脚本来完成特定任务这些逻辑顺序通常用脚本语言(scriptinglanguage)表示,脚本语言是一种编程语言,允许我们操作、定制或自动化任务脚本语言通常在运行时(runtime)解释,而不是在编译(compiled)时。所以脚本通常由某种解释器运行,解释器的工作就是按顺序执行脚本中的代码python就是一门解释型语言。一般来讲python代码被称为脚本(或者在更复杂的应用程序中称为入口点脚本)另一方面,包含python代码的文件(例如A.py)可以被另一个python文件(例如B.py)导入和使用,这种文件(A.py)就被称为模块(module)即模块和脚本的主要区别在于——模块存储可导入(Importable)的代码,脚本存储可执行(executable)的代码可导入代码是定义了某些内容但不执行特点操作的代码(例如函数或类的定义)可执行代码是执行某些特定操作的代码(例如函数的调用、循环、条件判断等)命令行运行在python编程中,我们可以以纯文本文件来编写python程序。需要注意的是,包含python代码的文件用 .py 做后缀名首先我们创建一个python脚本 hello.py#hello.pyprint("Hello,World!")使用 python 命令以Windows为例,我们需要打开Windows终端(win+R然后输入cmd),然后敲入下面的命令#相对路径>>>python.\hello.pyHello,World!>>>py.\hello.pyHello,World!#绝对路径>>>pythonD:\python\hello.pyHello,World!>>>pyD:\python\hello.pyHello,World!在Windows中,我们还可以使用 py 命令,这个命令会触发控制台应用程序的 py.exe 启动器在某些Linux发行版中,可能需要使用 python3 命令,而不是简单的 python终端或shell运行python脚本还有一个很酷的功能就是:可以使用重定向将python执行结果输出到某个文件中,方便我们将结果保存下来并对其分析>>>pythonD:\python\hello.py>D:\python\output.txt在上面的命令中,> 表示将输出(即python脚本的执行结果 helloworld!)重定向到 output.txt 文件中,而不是标准输出到屏幕中如果 output.txt 不存在,系统会自动创建它,如果存在:> :覆盖>> :追加直接使用脚本的文件名以Windows为例,我们可以直接使用脚本的文件名来执行脚本#绝对路径>>>D:\python\hello.py#相对路径>>>.\hello.py如果是Linux,需要先给脚本赋可执行权限,否则很有可能报【没有权限】的错误chmod+xhello.py赋权之后,hello.py 将可执行,但是还不一定能够正常运行 为什么会有这个报错,是因为操作系统不知道使用哪个程序去执行这个脚本,并尝试使用shell去运行它所以我们需要在脚本中添加一个shebang行[root@localhost~]#vim/hello.py#!/usr/bin/envpython3print("Hello,World!")添加shebang行之后,运行使用 -m 选项运行python模块#语法python-m-m 会在python的模块搜索路径、sys.path 中搜索模块名称并运行对应内容#Linux为例#执行命令的时候最好跟hello.py在同一层级目录中[root@localhost~]#python-mhello上面的例子中,把 hello.py 文件作为模块来运行。需要注意的是, 是模块的名称,而不是文件名(即不包含 .py 后缀)交互式运行前面我们知道,python是一门解释型语言,执行python脚本的时候解释器会按顺序把python代码解释成机器语言所以我们可以通过解释器以交互方式运行代码严谨点来讲,python这个名字指的是一个叫做解释器的软件python解释器解释器是在你的程序和计算机硬件之间工作的一层软件,能够使你的代码运行根据你使用的python实现,解释器可以是一个用以下代码编写的程序:C:像Cpython,是最常用的一种实现python本身:如PyPy,它是一个带有即时(JIT)编译器的快速实现java:Jython,可以利用Java生态无论使用哪种解释器,我们编写的代码都将在上面运行,所以能够运行脚本和代码的第一个条件就是正确安装解释器python解释器可以在两种不同的模式下运行代码:脚本或程序交互式或REPL(Read-Eval-PrintLoop)在脚本模式下,我们可以使用解释器将源文件(.py)作为可执行程序去运行;交互模式是你启动解释器并使用它作为一个平台来运行你直接输入的代码python的REPL运行代码REPL(ReadEvalPrintLoop)。它表示一个循环中,在这个循环中不断的执行:Read,读取用户输入Eval,执行输入内容Print,打印输出结果Loop,不断循环以上步骤Read->Eval->rint->Read->Eval->rint->Read->Eval->rint->...交互式会话是用于运行python代码的广泛使用的工具。若要启动python交互式会话(REPL),请打开命令行窗口,键入 python 命令交互模式的标准主提示符由三个右尖括号 >>>,以Windows为例 Linux系统 标准REPL还具有由三个句点()组成的辅助提示符 ... 。在复合语句(如条件、函数和类定义以及循环)添加缩进行时,会出现此提示>>>foriinrange(0,10):...print(i)一旦启动了REPL会话,就可以按照自己的意愿编写和运行python代码。唯一的缺点是:当关闭会话时,代码将消失这是脚本模式和交互模式之间的一个区别——脚本是持久的我们以交互方式执行python代码时,python会立即计算并执行每个表达式和语句从python代码中运行import 语句当我们从另一个模块、脚本或交互式会话导入模块时,python会加载其中的内容供以后访问和使用如果被导入模块只有类、函数、变量常量的定义时,我们往往不会意识到代码其实已经运行了,如果被导入模块里面有生成可见结果的函数、方法或其他语句的调用时,我们就能看到在导入的时候已经执行了>>>importhelloHello,World!多次执行import语句我们可以发现:每个会话只会运行一次模块中的代码 首次导入模块之后,后面我们即使修改了模块的内容,连续导入也不会执行任何操作,这是因为 import操作成本很高,python会采取一些额外的措施来优化整体性能对于上面的例子,python知道 hello 模块已经导入。因此,python会跳过下面的重复导入语句importlibimportlib 是python标准库中的一个模块,我们可以通过importlib 以编程的方式导入模块使用 import_module() ,可以模拟 import 操作,从而执行任何模块或脚本>>>importimportlib>>>importlib.import_module("hello")Hello,World!import_module()函数导入一个模块,把模块名字放到当前的命名空间中。它还运行目标模块包含的任何可执行代码。这就是为什么你会得到 Hello,World!在你的屏幕上前面我们提到过,导入的时候python只会执行一次模块中的代码,之后的导入是不会执行的如果你想重新加载模块并再次运行其中的代码,可以使用 reload() 函数,它会强制解释器再次导入>>>importhelloHelloWorld!>>>importimportlib>>>importlib.reload(hello)HelloWorld!exec() 函数除此之外,我们还可以使用内置 exec() 函数来执行>>>withopen("hello.py")ashello:...exec(hello.read())...Hello,World!我们首先打开 hello.py 文件,然后读取文件内容,再把内容传递给 exec() 函数IDE/代码编辑器运行为了开发大型和复杂的应用程序,我们应该使用集成开发环境(IDE)或高级文本编辑器这些程序中的大多数都有一些选项,允许我们在环境本身内部运行程序。它们通常包含Run或Build操作,这通常可以从工具栏或主菜单中获得。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-26 12:08 , Processed in 0.330810 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表