Tkinter GUI-Can't将参数传递给脚本



我用Tkinter制作了一个GUI,并将一个脚本链接到一个按钮。我还在GUI中创建了一个浏览文件选项,当我选择一个文件时,我会将其路径存储到一个名为"file"的变量中。我想做的是点击按钮,使用我存储在变量"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

我确实让它工作了,但我不知道为什么会这样。我所改变的只是不再像那样调用我的脚本

subprocess.call(['./verify_script.sh', var.get()], shell=True)

我省略了shell=True命令,参数正确地传递到脚本中。所以我打电话给subprocess.call(['./verify_script.sh', var.get()]),它运行得很好,但我想不出为什么。如有任何解释,不胜感激。

最新更新