Python解释器的命令行参数

Python解释器

Python 解释器是一个能够读取并执行 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、Python解释器:-m 选项不支持指定模块路径[-m ./path/模块名]。

在这里插入图片描述

  • 异常提示: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 --helppython -h 获取帮助信息。

Options and arguments (and corresponding environment variables):
    -b         : 在比较 bytesstrbytearraystr 时发出警告 (-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”,则使用随机值来种子 strbytes 对象的哈希。它也可以设置为 [0,4294967295] 范围内的整数以获取具有可预测种子的哈希值。
    PYTHONINTMAXSTRDIGITS   : 限制将 int 转换为字符串和将 int 转换回字符串时的最大数字字符数。值为 0 时禁用限制。2481632 基数之间的转换永远不会受到限制。
    PYTHONMALLOC            : 设置 Python 内存分配器和/或在 Python 内存分配器上安装调试钩子。使用 PYTHONMALLOC=debug 来安装调试钩子。
    PYTHONCOERCECLOCALE     : 如果此变量设置为 0,则禁用区域设置强制行为。使用 PYTHONCOERCECLOCALE=warn 请求在 stderr 上显示区域设置强制和区域设置兼容性警告。
    PYTHONBREAKPOINT        : 如果此变量设置为 0,则禁用默认调试器。它可以设置为您选择的调试器的可调用函数。
    PYTHONDEVMODE           : 启用开发模式。
    PYTHONPYCACHEPREFIX     : 字节码缓存(pyc)文件的根目录。
    PYTHONWARNDEFAULTENCODING:'encoding=None' 启用选择性编码警告。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖墩会武术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值