Python怎么直接运行txt文件中的代码

Dylan
Dylan
发布时间:2026-11-14 | 4人浏览过
原创

详细讲解Python如何直接运行txt文件中的代码,涵盖终端直接调用、runpy模块加载、exec函数动态解析及标准输入重定向等方法与避坑要点。

Python 解释器在执行脚本时,本质上并不强制要求文件后缀必须是 .py。只要文件保存的是合法的 Python 纯文本字符序列,无论是在操作系统的终端命令行中直接指定文件名执行,还是在已有的 Python 程序中通过标准库或内置动态执行接口调用,都可以无障碍直接运行 .txt 文件中的代码。

方法一:在系统终端命令行中直接运行 txt 文件

初学 Python 时,绝大多数人习惯使用 python main.py 命令来执行程序,这容易让人误以为解释器只认 .py 文件。事实上,Python 命令行工具的设计逻辑非常直接:它接收一个文件路径参数后,会打开该文件读取内容,将其作为源代码文本流送入编译器构建抽象语法树(AST),随后生成字节码并在虚拟机中执行。解释器本身并不会拦截或拒绝 .txt 扩展名。

1. 编写示例文本文件

在项目工作目录下新建一个名为 script.txt 的普通文本文件,使用任何文本编辑器输入以下标准的 Python 代码并保存:

# 文件名: script.txt
import sys

print("正在运行 txt 文件中的代码...")
data_list = [10, 20, 30, 40, 50]
total = sum(data_list)
average = total / len(data_list)

print(f"数据总和: {total}")
print(f"平均数值: {average}")
print(f"当前使用的解释器路径: {sys.executable}")

2. 终端执行命令与结果

打开系统的终端(Windows 下为 PowerShell 或 CMD,macOS / Linux 下为 Terminal),切换到该文件所在的目录,直接将 script.txt 作为参数传递给 Python:

python script.txt

如果使用的是特定版本环境,也可以使用对应的别名命令:

python3 script.txt

终端中会立即打印出计算结果与输出信息:

[输出示例]
正在运行 txt 文件中的代码...
数据总和: 150
平均数值: 30.0
当前使用的解释器路径: /usr/local/bin/python3
Python怎么直接运行txt文件中的代码
图 1:系统终端通过命令行直接执行 txt 代码文件的全流程推导

方法二:在 Python 代码中使用 runpy 模块运行

如果在现有的 Python 程序内部想要加载并运行一个外部的 .txt 脚本,直接使用 import script.txt 是行不通的。因为 Python 的 import 机制遵循特定的模块查找规范,系统只会主动扫描 .py、.pyc、.so(C扩展)等指定后缀,遇到带有小圆点的文件名还会将其解析为包层级目录。

对于这种需要“在代码内执行外部非 py 脚本”的场景,Python 标准库提供了内置的 runpy 模块。该模块的 run_path() 函数能够像终端运行脚本一样定位并执行任意路径的文本文件,同时将该文件内部生成的所有全局变量以字典形式返回给当前程序。

代码示例:使用 runpy.run_path

import runpy

# 执行当前目录下的 txt 文本脚本
# run_path 会执行该文件内的所有顶层语句
file_globals = runpy.run_path("script.txt")

# 获取脚本执行后产生的变量结果
print("外部 txt 脚本执行完成!")
print("从 txt 中获取的 total 变量值:", file_globals.get("total"))
print("从 txt 中获取的 average 变量值:", file_globals.get("average"))
提示:runpy.run_path() 在执行时会为被调用的 .txt 文件构建一个崭新的模块命名空间,其内部的 __name__ 会被设置为 "<run_path>"(也可以通过参数指定为 "__main__"),因此非常适合用来做插件调度与外部任务分发。
Python怎么直接运行txt文件中的代码
图 2:原生 import 局限性与 runpy 模块执行机制的架构对比

方法三:使用内置函数 exec() 动态解析与求值

如果除了运行文件之外,还希望对文本内容进行预处理(例如替换关键字、动态注入变量、或者只执行文件中的某些段落),Python 内置的 exec() 函数是最灵活的选择。

基本思路分为两步:首先使用 Python 内置的 open() 函数读取 .txt 文件的全部文本内容,然后将其传递给 exec() 动态编译执行。

1. 基础读取与执行代码

# 打开并读取 txt 文件的所有代码字符
with open("script.txt", "r", encoding="utf-8") as f:
    source_code = f.read()

# 执行代码
exec(source_code)

2. 规范做法:隔离全局与局部命名空间

直接调用 exec(source_code) 会将文本中的变量直接写入当前函数的局部或全局作用域中,这可能导致原有同名变量被意外覆盖。在实际项目中,强烈建议传入独立的字典进行命名空间隔离:

# 准备独立的沙箱字典
custom_globals = {"__builtins__": __builtins__}
custom_locals = {}

with open("script.txt", "r", encoding="utf-8") as f:
    source_code = f.read()

# 将执行作用域限定在自定义字典中
exec(source_code, custom_globals, custom_locals)

# 从独立字典中安全读取变量
if "total" in custom_locals:
    print("安全捕获计算值:", custom_locals["total"])
elif "total" in custom_globals:
    print("安全捕获全局值:", custom_globals["total"])
安全警告:exec() 拥有完整的系统执行权限。绝对不要使用 exec() 直接执行来源未知、用户上传或不可信网络接口返回的 .txt 文件,否则可能会遭受任意代码执行攻击(如删除本地文件或运行恶意后门)。

方法四:通过操作系统管道与标准输入重定向

在自动化构建、容器初始化(Docker)或者 Linux / macOS 的 Shell 运维脚本中,有时我们既不希望运行一个新写的宿主 Python 脚本,也不希望给解释器显式传递文件名参数。此时可以利用操作系统的输入流重定向功能。

1. 标准输入重定向(< 操作符)

python < script.txt

此时,操作系统 Shell 会将 script.txt 打开并将其文件描述符连接到 Python 进程的标准输入(sys.stdin)。Python 解释器在没有收到文件名参数时,会默认从标准输入读取代码并逐行解析运行。

2. 管道传递(Pipeline)

在 Linux / macOS 或类 Unix 环境下,可以使用 cat 命令结合管道将文本流输送给 Python:

cat script.txt | python

这种方式的特点是 Python 进程内部的 __file__ 属性通常为未定义或为 <stdin>,非常适合那些单次消费、执行后即焚的自动化轻量任务。

Python怎么直接运行txt文件中的代码
图 3:针对不同业务环境与调用方式的技术选型决策树

操作细节与常见避坑指南

虽然直接运行 .txt 文件在技术上没有障碍,但在实际生产或跨平台操作中,经常会遇到几个典型问题:

1. 文件编码不一致导致 SyntaxError

在 Windows 系统下,很多文本编辑软件(如默认的记事本)保存 .txt 时可能会使用 ANSI(GBK)编码。当代码中含有中文字符或注释时,Python 3 默认以 UTF-8 读取源码,此时会抛出形如 SyntaxError: Non-UTF-8 code starting with... 的报错。因此,在保存 .txt 文件时,务必在编辑器中明确指定编码格式为 UTF-8。

2. 相对路径与当前工作目录差异

如果 .txt 文件内部包含读取外部文件的代码(例如 open("data.csv")):

  • 使用 python path/to/script.txt 运行时,Python 的当前工作目录(CWD)是终端发起命令时的路径,而不是 script.txt 所在的目录。
  • 如果使用 exec() 动态调用,由于代码是在宿主环境中运行,其相对路径将完全跟随宿主程序的工作目录。

3. txt 文件之间相互引用时的限制

如果主代码保存在 main.txt 中,辅助模块保存在 helper.txt 中,在 main.txt 内部写 import helper 是无法成功的。因为 Python 的导入系统根据名称搜索模块时,根本不会去匹配 .txt 文件。对于相互依赖的复杂工程项目,应当规范采用 .py 扩展名;如果必须依赖文本文件,应改用 runpy.run_path() 显式调用并获取导出对象。

Python怎么直接运行txt文件中的代码
图 4:四种运行方式的语法形式、隔离机制与核心适用场景对比一览

总结

Python 解释器关注的是内容本身的语法结构,而不是操作系统的扩展名后缀。在实际开发和自动化场景中:

  • 如果只是想在控制台快速验证或单次运行,直接执行 python script.txt 是最省心直接的途径;
  • 如果是在其他 Python 程序中需要动态调用文本文件中的功能,标准库的 runpy.run_path() 提供了最规范的模块级命名空间隔离与结果返回机制;
  • 如果需要动态修改字符串或严格限制执行环境,可以使用 exec() 配合沙箱字典;
  • 在 Shell 自动化流水线中,python < script.txt 则是无缝衔接管道命令的利器。

只要确保文件采用标准的 UTF-8 编码,并注意规避跨文件的 import 限制,就能够安全、稳定地在各类场景中运行 .txt 文本中的 Python 代码。

相关专题:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表