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
相关产品推荐
相关产品推荐

