You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jupyter脚本转.py文件终端运行失败,subprocess报错求助

问题根源

这个问题我遇见过,核心原因是工作目录不一致导致的:

  • 你在Jupyter Notebook里运行时,Notebook的当前工作目录就是它所在的文件夹(也就是/Users/USER/Local/),所以subprocess调用python main.py时,能从这个目录找到目标文件。
  • 但在终端运行LiveRun.py时,终端的当前工作目录是你的home目录(~,也就是/Users/USER/),这时候main.py不在这个目录下,自然会报错找不到文件。
解决方案

给你三种靠谱的解决方式,按灵活性排序:

1. 动态生成main.py的绝对路径(最推荐)

用Python的__file__变量获取当前脚本LiveRun.py的绝对路径,再拼接出main.py的路径——这种方式不管你把脚本移动到哪里,都能正确找到依赖文件:

import os
import subprocess

# 获取当前脚本所在的目录
script_dir = os.path.dirname(os.path.abspath(__file__))
# 拼接main.py的绝对路径
main_file_path = os.path.join(script_dir, "main.py")
# 构建执行命令(参数直接用你传入的数值即可)
command = f'python "{main_file_path}" {191019051505}'
prediction_new = subprocess.check_output(command, shell=True)

2. 直接使用main.py的绝对路径

如果你的脚本位置固定不变,也可以直接把main.py的绝对路径写死在命令里:

pred = 'python /Users/USER/Local/main.py 191019051505'
prediction_new = subprocess.check_output(pred, shell=True)

缺点是以后移动文件夹时,需要手动修改路径。

3. 先切换到脚本所在目录再执行命令

在subprocess调用前,先切换到LiveRun.py所在的文件夹,这样相对路径就能正常生效:

import os
import subprocess

# 获取当前脚本所在目录
script_dir = os.path.dirname(os.path.abspath(__file__))
# 切换工作目录到该文件夹
os.chdir(script_dir)
# 现在调用相对路径就没问题了
pred = 'python main.py 191019051505'
prediction_new = subprocess.check_output(pred, shell=True)
额外提示

如果你的系统里同时装了Python2和Python3,建议把命令里的python换成python3,避免调用到错误的版本,比如:

command = f'python3 "{main_file_path}" {191019051505}'

内容的提问来源于stack exchange,提问作者user11476329

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:17:20