从 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()
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()