背景: 練習のために、ヘルプ デスク ユーザーが grep | SSH/端末の作業を実行する必要なく、ログをテールします。これらのユーザーは Windows マシンで実行しています。それ以外の場合は、サブプロセスを使用します。一部のサーバーはシステム アカウントを使用しますが (これらはスクリプトに事前に入力されています)、他のサーバーはユーザーが資格情報を入力する必要があります。
スクリプト (詳細は以下) が実行され、ユーザーが資格情報を間違って入力すると、「ロガー "paramiko.transport" のハンドラーが見つかりませんでした」というエラーがスローされた後、アプリケーションがハングします。ユーザーが認証情報が事前に入力されていないオプションを選択すると、ユーザー名とパスワードの入力を求められます。資格情報が適切なリストに追加され、ポップアップが破棄され、ログ チェック機能が呼び出されます。エラーがスローされたときにウィンドウがハングする原因は何ですか?また、そのような問題を処理する最善の方法は何ですか?
logging.basicConfig() を追加しようとしましたが、アプリケーションがまだハングします。
完全なスクリプト: http://pastebin.com/TUvs92yN
ユーザーが最初に送信ボタンを押すと、以下が呼び出されます。
lambda: credentials() if hosts[log.get()][0] in needs_pass else log_check()
ホスト名がリストにある場合は、認証情報ボックスが表示されます。ユーザーがユーザー名とパスワードを入力すると、submit_cred() 関数が呼び出されます。
def submit_cred():
if len(hosts[log.get()]) < 3:
hosts[log.get()].append(username_prompt.get())
hosts[log.get()].append(password_prompt.get())
prompt.destroy()
log_check()
ここからトラブルが始まります。資格情報が正しい場合、アプリケーションは期待どおりに結果を表示しますが、そうでない場合、ウィンドウが破棄された後に log_check() が呼び出されるとエラーが発生し、アプリケーションがハングします。log_check() で認証の問題を処理しようとしましたが、現時点ではそれが問題になるほど十分に進んでいないようです。