如何在Python文件中调用jupytext命令自动生成.ipynb文件
Python脚本运行时自动调用jupytext生成ipynb实现方案
直接在你的.py文件头部加入如下代码即可,逻辑和你手动在控制台执行命令完全一致,不需要每次手动敲指令:
import subprocess import os import sys # 获取当前运行脚本的绝对路径,避免工作目录不对导致找不到文件 current_script = os.path.abspath(__file__) try: # 按subprocess要求拆分命令参数,和手动执行的命令一一对应 subprocess.run( ["jupytext", "--to", "notebook", current_script], capture_output=True, text=True, check=True ) print(f"已同步生成notebook文件:{os.path.splitext(current_script)[0]}.ipynb") except subprocess.CalledProcessError as err: print(f"ipynb自动转换失败:{err.stderr}", file=sys.stderr) # --- 以下是你原有脚本的业务代码,正常写就行 ---
关键说明
- 参数写法逻辑和你参考的
ls -la示例完全一致:把命令行按空格拆分的每一段单独作为列表元素即可,你手动执行的jupytext --to notebook notebook.py拆分后就是["jupytext", "--to", "notebook", 目标py文件路径],不要把整段命令拼成字符串传入,避免转义、空格路径等问题。 - 用
__file__获取当前脚本路径而不是硬编码文件名:不管你从哪个工作目录启动脚本,都能准确定位到要转换的py文件,不会出现找不到文件的问题。 check=True参数会在jupytext执行失败(比如未安装jupytext、权限不足)时抛出异常,配合try/except捕获可以避免转换逻辑阻塞主脚本运行。- 该调用和手动执行命令效果完全一致,默认会覆盖同路径下同名的
.ipynb文件,每次运行py都会同步更新笔记本内容。 - 如果运行时提示找不到jupytext命令,说明你当前运行脚本的Python环境没有把jupytext加入PATH,可以把列表第一个参数替换成jupytext的完整可执行路径,比如虚拟环境下的
"/your/venv/path/bin/jupytext"即可。
内容的提问来源于stack exchange,提问作者user7665853
相关产品推荐
相关产品推荐

