文章目录
Python + Python解释器
- Python:是一种高级编程语言,支持多种编程范式(如面向对象、过程式和函数式编程)。
- Python 解释器:执行 Python 代码的程序。解释器是 Python 语言的核心组件之一,负责将编写的 Python 代码逐行解释为计算机能够理解的指令,并立即执行。
其主要功能包括:
- 代码解释与执行:将 Python 源代码转换为字节码,然后由虚拟机执行。
- 错误检测:在执行过程中实时检测语法错误和运行时错误,并生成相关的错误报告。
- 交互式模式:支持交互式命令行(REPL,Read-Eval-Print Loop),可以直接输入并执行 Python 语句,用于调试和测试。
- 支持多种命令行参数:用于控制解释器行为、优化代码、调试程序或传递参数给脚本。
一、项目实战
1.1、常用参数(测试)
"""
# script.py
import sys
def main():
print(f"x = {x}")
print("脚本名:", sys.argv[0])
print("参数一:", sys.argv[1])
print("参数二:", sys.argv[2])
if __name__ == '__main__':
x = 520
main()
"""
python # 启动交互模式,可以逐行输入和执行 Python 代码。
python -V # 显示Python版本
python script.py # 运行Python脚本
python script.py arg1 arg2 # 执行Python脚本并传递参数
python -c "print('Hello')" # 使用 -c 选项,执行 Python 代码
python -m script # 使用 -m 选项,运行模块作为脚本(模块:即.py文件的文件名)
python -B script.py # 使用 -B 选项,禁用字节码生成(.pyc文件)
python -i script.py # 使用 -i 选项,进入交互模式。首先执行脚本文件,然后进入交互模式(REPL),且可以查看或修改脚本中定义的变量和函数。
python -c "import sys; sys.path.append('F:\py'); print(sys.path);" # 调整搜索路径
1.2、-m 选项:只支持指定模块名称,不支持模块路径。
- 异常提示:
No module named
- 原因分析:在Python解释器中,-m 选项只支持指定模块名称[-m 模块名],而不支持同时指定模块路径[-m ./path/模块名]。
- 解决方案:若模块需要同时指定路径,添加文件路径后再指定模块名称。
import sys
import subprocess
sys.path.append(r'F:\py') # 添加路径到搜索路径
command = "python -m deeplearning_main" # 构建命令
result = subprocess.run(command, shell=True, capture_output=True, text=True) # 执行命令
print(f"Executing command: {
command}") # 打印命令
print("stdout:", result.stdout) # 打印输出结果
print("stderr:", result.stderr) # 打印输出异常
if result.returncode == 0: # 检查返回码
print("Script executed successfully")
else:
print(f"Script failed with return code {
result.returncode}")
1.3、在当前虚拟环境下激活新的虚拟环境
在Python中,执行conda activate命令激活新的虚拟环境
- 异常提示:
conda activate命令会在一个新的子进程中执行,且该子进程的环境变量变化不会影响到当前Python进程中运行的后续代码。
- 解决方案:构建命令字符串:激活环境 + 执行.py文件,然后同时传递给 subprocess.run,而不是前后运行两次。
"""########################################################
import subprocess
subprocess.run(f"conda activate deeplearning36")
subprocess.run(f"python exampl_runner.py")
# 备注:exampl_runner.py将在主函数的环境下执行,而不是新激活环境下。
########################################################"""
import subprocess
conda_env = "deeplearning36"
script_path = "exampl_runner.py"
command = f"conda activate {
conda_env} && python {
script_path}" # 激活环境的同时执行py文件
print(f"Executing command: {
command}")
try:
subprocess.run(command)
except subprocess.CalledProcessError as e:
print(f"Error: {
e}")
# 备注:exampl_runner.py将在新激活环境下执行。
二、参数解析
在命令行中输入 python --help
或 python -h
获取帮助信息。
Options and arguments (and corresponding environment variables):
-b : 在比较 bytes 和 str、bytearray 和 str 时发出警告 (-bb: 发出错误)
""" -B : 导入时不生成 .pyc 文件; 同时 PYTHONDONTWRITEBYTECODE=x"""
""" -c cmd : 以字符串形式传递程序(终止选项列表)"""
-d : 打开解析器调试输出(仅限专家,仅在调试版本上有效); 同时 PYTHONDEBUG=x
-E : 忽略 PYTHON* 环境变量(例如 PYTHONPATH)
-h : 打印此帮助消息并退出 (也可以使用 -? 或 --help)
""" -i : 在运行脚本后交互"""式检查; 即使 stdin 不显示为终端,也会强制显示提示符;同时 PYTHONINSPECT=x
-I : 将 Python 与用户环境隔离开(意味着 -E 和 -s)
""" -m mod : 以脚本形式运行库模块(终止选项列表)"""
-O : 删除 assert 和 __debug__-dependent 语句; 在 .pyc 扩展名之前添加 .opt-1; 同时 PYTHONOPTIMIZE=x
-OO : 进行 -O 更改并丢弃文档字符串; 在 .pyc 扩展名之前添加 .opt-2
-q : 在交互启动时不打印版本和版权信息
-s : 不将用户站点目录添加到 sys.path; 同时 PYTHONNOUSERSITE
-S : 在初始化时不暗示 'import site'
-u : 强制 stdout 和 stderr 流无缓冲; 此选项对 stdin 无效;同时 PYTHONUNBUFFERED=x
-v : 详细模式(跟踪导入语句); 同时 PYTHONVERBOSE=x
""" -V : 打印 Python 版本号并退出(也可以使用 --version)"""
给定两次时,打印有关构建的更多信息
-W arg : 警告控制;arg 是 action:message:category:module:lineno
同时 PYTHONWARNINGS=arg
-x : 跳过源的第一行,允许使用非 Unix 形式的 #!cmd
-X opt : 设置特定于实现的选项。以下选项可用:
-X faulthandler: 启用 faulthandler
-X showrefcount: 在程序结束或交互解释器中的每个语句后输出总引用计数和使用的内存块数。这仅适用于调试版本
-X tracemalloc: 使用 tracemalloc 模块开始跟踪 Python 内存分配。默认情况下,只有最近的帧存储在跟踪的回溯中。使用 -X tracemalloc=NFRAME 以使用 NFRAME 帧的跟踪限制开始跟踪
-X importtime: 显示每个导入花费的时间。它显示模块名称、累积时间(包括嵌套导入)和自身时间(不包括嵌套导入)。请注意,其输出可能在多线程应用中出现错误。典型用法是 python3 -X importtime -c 'import asyncio'
-X dev: 启用 CPython 的“开发模式”,引入额外的运行时检查,默认情况下太昂贵而不启用。开发模式的效果:
* 添加默认警告过滤器,如 -W 默认
* 在内存分配器上安装调试钩子:参见 PyMem_SetupDebugHooks() C 函数
* 启用 faulthandler 模块以在崩溃时转储 Python 回溯
* 启用 asyncio 调试模式
* 将 sys.flags 的 dev_mode 属性设置为 True
* io.IOBase 析构函数记录 close() 异常
-X utf8: 为操作系统接口启用 UTF-8 模式,覆盖默认的区域设置感知模式。-X utf8=0 明确禁用 UTF-8 模式(即使它会自动激活)
-X pycache_prefix=PATH: 将 .pyc 文件写入以给定目录为根的并行树,而不是写入代码树
-X warn_default_encoding: 为 'encoding=None' 启用选择性编码警告
-X int_max_str_digits=number: 限制 int<->str 转换的大小。这有助于在解析不受信任的数据时避免拒绝服务攻击。默认是 sys.int_info.default_max_str_digits。0 禁用限制。
--check-hash-based-pycs always|default|never:
控制 Python 如何使基于哈希的 .pyc 文件无效
file : 从脚本文件中读取程序
- : 从 stdin 读取程序(默认情况下;如果是 tty,则为交互模式)
arg ... : 在 sys.argv[1:] 中传递给程序的参数
其他环境变量:
PYTHONSTARTUP : 交互式启动时执行的文件(没有默认值)
PYTHONPATH : 使用 ';' 分隔的目录列表,前缀添加到默认模块搜索路径。结果是 sys.path。
PYTHONHOME : 备用 <prefix> 目录(或 <prefix>;<exec_prefix>)。默认模块搜索路径使用 <prefix>\python{
major}{
minor}。
PYTHONPLATLIBDIR: 覆盖 sys.platlibdir。
PYTHONCASEOK : 在 'import' 语句中忽略大小写(Windows)。
PYTHONUTF8 : 如果设置为 1,则启用 UTF-8 模式。
PYTHONIOENCODING: 用于 stdin/stdout/stderr 的编码[:errors]。
PYTHONFAULTHANDLER : 在致命错误时转储 Python 回溯。
PYTHONHASHSEED : 如果此变量设置为“random”,则使用随机值来种子 str 和 bytes 对象的哈希。它也可以设置为 [0,4294967295] 范围内的整数以获取具有可预测种子的哈希值。
PYTHONINTMAXSTRDIGITS : 限制将 int 转换为字符串和将 int 转换回字符串时的最大数字字符数。值为 0 时禁用限制。2、4、8、16 和 32 基数之间的转换永远不会受到限制。
PYTHONMALLOC : 设置 Python 内存分配器和/或在 Python 内存分配器上安装调试钩子。使用 PYTHONMALLOC=debug 来安装调试钩子。
PYTHONCOERCECLOCALE : 如果此变量设置为 0,则禁用区域设置强制行为。使用 PYTHONCOERCECLOCALE=warn 请求在 stderr 上显示区域设置强制和区域设置兼容性警告。
PYTHONBREAKPOINT : 如果此变量设置为 0,则禁用默认调试器。它可以设置为您选择的调试器的可调用函数。
PYTHONDEVMODE : 启用开发模式。
PYTHONPYCACHEPREFIX : 字节码缓存(pyc)文件的根目录。
PYTHONWARNDEFAULTENCODING: 为 'encoding=None' 启用选择性编码警告。