我用Tkinter制作了一个GUI,并将脚本链接到按钮。我还在GUI中创建了一个浏览文件选项,当我选择一个文件时,会将其路径存储到名为“ file”的变量中。我想做的是单击按钮,并使用我存储在变量“文件”中的路径运行脚本,但出现“没有此类文件或目录错误”。该解决方案必须非常明显,但我无法弄清楚。这是我的GUI代码:
from tkinter import *
from tkinter import filedialog
from tkinter import ttk
from tkinter import messagebox
import subprocess
window = Tk()
#modify window
window.title("Random Title")
window.geometry("600x400")
tab_control = ttk.Notebook(window)
#Creating tabs
tab1 = ttk.Frame(tab_control)
tab2 = ttk.Frame(tab_control)
#Modifying tabs
tab_control.add(tab1, text='Issue')
tab_control.add(tab2, text='Verify')
file = ""
var = StringVar()
var.set("")
w = Entry(tab2,textvariable=var)
w.grid(column=1,row=0)
#Creating button & actions
def issue():
subprocess.call('./issue_script.sh', shell=True)
messagebox.showinfo('Issue Certificate', 'Certificate issued successfully!')
btn = Button(tab1, text="Issue Certificate", command=issue)
btn.grid(column=1, row=5)
def browse():
file = filedialog.askopenfilename(filetypes = (("all files","*.*"),("Text files","*.txt")))
var.set(file)
print(file)
btn2 = Button(tab2, text="Browse", command=browse)
btn2.grid(column=3, row=0)
def verify():
subprocess.call(['./verify_script.sh', file], shell=True)
btn = Button(tab2, text="Verify Certificate", command=verify)
btn.grid(column=1, row=5)
tab_control.pack(expand=1, fill='both')
#event loop
window.mainloop()
我还添加了一个print(file)
命令,以便查看变量中存储的内容,并获得正确的结果(选择的路径)。也许错误发生在我称为脚本subprocess.call(['./verify_script.sh', file], shell=True)
的行中或脚本本身中。这是脚本代码:
#!/bin/bash
echo "Verifying certificate..."
cd
python3 cert-issuer/cert-verifier/cert_verifier/verifier.py $1
答案 0 :(得分:0)
我实际上使它工作了,但是我不知道为什么会这样。 我所做的只是改变了我的脚本而不是这样
subprocess.call(['./verify_script.sh', var.get()], shell=True)
我忽略了shell=True
命令,并且参数正确地传递到了脚本中。
所以我打电话给subprocess.call(['./verify_script.sh', var.get()])
,它工作正常,但我不知道为什么。非常感谢任何解释。