如何在Python交互模式及脚本执行时自动运行指定导入代码?
解决Python自动加载Rich Pretty打印的两种场景问题
问题根源
你之前设置的别名alias python='python3 -i /path/to/startup.py'仅在无参数的交互模式下有效,原因是:
-i参数会强制Python在执行任何代码后进入交互式shell- 当传递脚本参数(如
python myscript.py)时,myscript.py会被当作startup.py的命令行参数,而非要执行的目标脚本,导致脚本无法正常运行
可行解决方案
方案一:用Shell函数区分交互/脚本模式
直接替换~/.bashrc中的原有别名,添加以下Shell函数:
python() { if [ $# -eq 0 ]; then # 无参数:进入交互模式并加载startup.py python3 -i /path/to/startup.py else # 有参数:先执行startup代码,再运行目标脚本并传递后续参数 python3 -c "from rich import pretty; pretty.install(); exec(open('$1').read())" "${@:2}" fi }
方案二:结合PYTHONSTARTUP环境变量与Shell函数
这种方式更符合Python官方推荐的启动脚本配置:
- 先在~/.bashrc中添加环境变量(仅作用于交互模式):
export PYTHONSTARTUP="/path/to/startup.py"
- 再添加Shell函数处理脚本运行场景:
python() { if [ $# -ne 0 ]; then # 运行脚本:先加载startup.py,再执行目标脚本并传递参数 python3 -c "import sys; exec(open('$PYTHONSTARTUP').read()); exec(open('$1').read())" "${@:2}" else # 无参数:直接进入交互模式(自动加载PYTHONSTARTUP) python3 fi }
生效步骤
- 保存~/.bashrc文件
- 在终端执行
source ~/.bashrc让配置立即生效
验证方法
- 交互模式:输入
python,进入shell后直接打印字典(如print({"a":1, "b":[2,3]})),能看到Rich格式化的输出 - 脚本模式:运行
python myscript.py,脚本中所有打印输出会自动应用Rich的pretty格式化
内容的提问来源于stack exchange,提问作者epistoteles
相关产品推荐
相关产品推荐

