私は小さなGUIを作成しましたTkinter/python
:
import Tkinter
import tkMessageBox
import os
top = Tkinter.Tk()
top.geometry("400x250")
def root_login():
os.system("gksudo su && sudo su")
tkMessageBox.showinfo("Login successful!")
def close_window():
top.destroy()
B = Tkinter.Button(top, text ="Login", command = root_login)
B.pack()
Q = Tkinter.Button(top, text ="Quit", command = close_window)
Q.pack()
top.mainloop()
に間違ったパスワードが指定されているgksudo su dialog
場合でも、ダイアログには「ログインに成功しました!」と表示されます。
「ログインに成功しました!」ではなく、パスワードの入力が間違っていたことを示すにはどうすればよいですか。このウィンドウを、作成しているアプリケーションのログイン画面として作成したいと思います。
話題から外れているが、そのためにgksudo
:
GUIはターミナルで何が起こるかに影響を与えないので、何を達成したいかわからない:)
問題は、実行する条件を設定していないtkMessageBox.showinfo("Login successful!")
ため、で何が起こってos.system("gksudo su && sudo su")
も次の行が実行されることです。
def root_login():
os.system("gksudo su && sudo su")
tkMessageBox.showinfo("Login successful!")
まず、os.system
これ以上使用しないでください。本当に、本当に古風です。
以下を使用した代替コーディングについては、以下を参照してくださいsubprocess.check_call
。
#!/usr/bin/env python
import subprocess
import Tkinter
import tkMessageBox
top = Tkinter.Tk()
top.geometry("400x250")
def root_login():
try:
subprocess.check_call(["gksudo", "su"])
except subprocess.CalledProcessError:
tkMessageBox.showinfo("message", "OOOOPS...\nWrong password!")
else:
tkMessageBox.showinfo("message", "Login successful!")
def close_window():
top.destroy()
B = Tkinter.Button(top, text ="Login", command = root_login)
B.pack()
Q = Tkinter.Button(top, text ="Quit", command = close_window)
Q.pack()
top.mainloop()
ただしgksudo su
、GUIを実行しているため、効果はありません:)
subprocess.check_call(["gksudo", "su"])
...subprocess.CalledProcessError
パスワードが正しくない場合にを発生させ、次のメッセージを表示します。
パスワードが正しい場合、メッセージは次のとおりです。
現れる。
try/except/else
建設、私は明快さの理由のためにしました。以下の関数は、次の行から「ジャンプ」するため、まったく同じように機能します。
subprocess.check_call(["gksudo", "su"])
に
tkMessageBox.showinfo("message", "OOOOPS...\nWrong password!")
場合に応じて、そしてすぐに、最初のものはsubprocess.CalledProcessError
:を上げます
def root_login():
try:
subprocess.check_call(["gksudo", "su"])
tkMessageBox.showinfo("message", "Login successful!")
except subprocess.CalledProcessError:
tkMessageBox.showinfo("message", "OOOOPS...\nWrong password!")
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加