如何解决在Windows cmd行上通过Python脚本打开Jupyter Notebook
我有一个简单的Tkinter GUI用下拉列表中,在被选择时,运行的函数。我知道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
来保持窗口打开,则可以看到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”命令没有执行。
任何人都知道我在想什么,或者有可能吗?我的猜测是,由于(基本)提示正在打开,因此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()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。