从 Windows cmd 行上的 Python 脚本打开 Jupyter Notebook

Opening a Jupyter Notebook from Python Script on Windows cmd line

I have a simple tkinter GUI with a dropdown, that when selected, 运行s a function.我知道 anaconda 提示符和 cmd 行是不同的,但是,如果不使用外部批处理文件,我无法让命令在 python 脚本中运行。

我正在从一个 csv 文件文件夹中读取列表,一切正常。

目前,这有效:

import tkinter as tk
import os

folder = 'C:/Users/[user]/Desktop'

OptionList = [fname for fname in os.listdir(folder) if fname.endswith('.csv')]

app = tk.Tk()

app.geometry('500x200')

variable = tk.StringVar(app)
variable.set(OptionList[0])

opt = tk.OptionMenu(app, variable, *OptionList)
opt.config(width=500, font=('Helvetica', 12))
opt.pack(side="top")

def callback(*args):
    os.system('cmd /k "C:\Users\[user]\Desktop\notebook_launch.bat"')
    app.destroy()

variable.trace("w", callback)
app.mainloop()

这是工作批处理文件:

@echo on
call C:\ProgramData\Anaconda3\Scripts\activate.bat
voila "C:\Users\[user]\Documents\notebook.ipynb"

当我尝试从 windows cmd 执行命令时,如果我使用 /k 而不是 /c 来保持 window 打开,我可以看到anaconda 提示打开,但是下一行代码没有执行。

尝试在脚本中将两个命令都发送到 运行:

def callback(*args):
    os.system('cmd /c "C:\ProgramData\Anaconda3\Scripts\activate.bat"')
    os.system('cmd /c "voila C:\Users\[user]\Documents\notebook.ipynb"')
    app.destroy()

替代尝试,结果相同:

def callback(*args):
    os.system('cmd /c "C:\ProgramData\Anaconda3\Scripts\activate.bat" && "voila C:\Users\[user]\Documents\notebook.ipynb"')
    app.destroy()

如上所述,我也尝试过使用 && 将命令组合在一行中,但结果相同,只有 anaconda 提示符打开并且“voila”命令不执行。

有人知道我遗漏了什么或者可能吗?我的猜测是,由于 (base) 提示打开,os.system 函数不知道如何处理 anaconda 提示。感谢任何帮助。

编辑:

原来我只需要暂停执行半秒,因为它执行得太快了。通过在两条线之间添加 import time 和压缩 time.sleep(.5),一切都完美运行。

功能代码:

import time

def callback(*args):
    os.system('cmd /c "C:\ProgramData\Anaconda3\Scripts\activate.bat"')
    time.sleep(.5)
    os.system('cmd /c "voila C:\Users\[user]\Documents\notebook.ipynb"')
    app.destroy()

原来我只需要暂停执行半秒,因为它执行得太快了。通过增加导入时间并在两条线之间压缩 time.sleep(.5),一切都完美运行。

运行代码:

import time

def callback(*args):
    os.system('cmd /c "C:\ProgramData\Anaconda3\Scripts\activate.bat"')
    time.sleep(.5)
    os.system('cmd /c "voila C:\Users\[user]\Documents\notebook.ipynb"')
    app.destroy()