Letztes Mal Legen Sie fest, dass von der Clientanwendung aus gestartet wird, indem der vom erstellten Lambda ausgeführte Prozess umgeleitet wird.
pyinstaller
mit dem folgenden Befehl.
pip install pyinstaller
from utils.logger import LoggerObj
import sys
import os
import requests
import tkinter
from datetime import datetime
import boto3
from tkinter import *
from tkinter import messagebox
from tkinter import filedialog
from tkinter import ttk
from tkinter.ttk import *
import threading
from tkinter import messagebox
from tkinter import filedialog
from tkinter import Button,ttk,StringVar
from selenium import webdriver
from functools import partial
root= tkinter.Tk()
EXECUTE_LIST=['Prozess A.','Prozess B.','Prozess C.']
class PythonGui():
def __init__(self):
self.lock = threading.Lock()
self.inputText=StringVar()
self.progressMsg=StringVar()
self.progressBar=None
self.progressMsgBox=None
self.progressStatusBar=None
self.progressValue=None
def init(self):
pass
#Bedienung nach Ersteinstellung
def preparation(self,logfilename):
self._executer=partial(self.execute,logfilename)
def progressSequence(self,msg,sequenceValue=0):
self.progressMsg.set(msg)
self.progressValue=self.progressValue+sequenceValue
self.progressStatusBar.configure(value=self.progressValue)
def quite(self):
if messagebox.askokcancel('Bestätigung des Endes','Möchten Sie den Prozess beenden?'):
if self.lock.acquire(blocking=FALSE):
pass
else:
messagebox.showinfo('Bestätigung des Endes','Bitte schließen Sie den Browser, während der Browser ausgeführt wird.')
self.lock.release()
root.quit()
else:
pass
def execute(self,logfilename):
logObj=LoggerObj()
log=logObj.createLog(logfilename)
log.info('Starten Sie die Verarbeitung')
executeType=EXECUTE_LIST.index(self.combo.get())
nowDate=datetime.now().strftime('%Y%m%d%H%M%S')
inputVal=self.inputText.get()
client = boto3.client('batch')
JOB_NAME = 'pandas-envtest'
JOB_QUEUE = "arn:aws:batch:ap-northeast-1:XXXXXXXXXX:job-queue/first-run-job-queue"
JOB_DEFINITION = "arn:aws:batch:ap-northeast-1:XXXXXXXXXX:job-definition/pandas-envtest:1"
response = client.submit_job(
jobName = JOB_NAME,
jobQueue = JOB_QUEUE,
jobDefinition = JOB_DEFINITION,
containerOverrides={
'command': [
inputVal,nowDate,str(executeType)
],
'environment': [
{
'name': 'TEST',
'value': 'abcd'
}
]
}
)
self.progressMsgBox.after(10,self.progressSequence('Die Verarbeitung ist im Gange',sequenceValue=50))
root.update_idletasks()
self.progressBar.stop()
self.progressMsgBox.after(10,self.progressSequence('Registrierungsprozess abgeschlossen',sequenceValue=50))
root.update_idletasks()
log.info('Verarbeitung beenden')
self.lock.release()
def doExecute(self):
if self.lock.acquire(blocking=FALSE):
if messagebox.askokcancel('Bestätigung vor der Ausführung','Möchten Sie den Vorgang ausführen?'):
self.progressValue=0
self.progressStatusBar.configure(value=self.progressValue)
self.progressBar.configure(maximum=10,value=0)
self.progressBar.start(100)
th = threading.Thread(target=self._executer)
th.start()
else:
self.lock.release()
else:
messagebox.showwarning('Error','Die Verarbeitung ist im Gange')
def progressMsgSet(self,msg):
self.progressMsg.set(msg)
def progressStart(self):
self.progressBar.start(100)
def main(self):
root.title("Python GUI")
content = ttk.Frame(root)
frame = ttk.Frame(content, relief="sunken", width=300, height=500)
title = ttk.Label(content, text="Python GUI")
content.grid(column=0, row=0)
title.grid(column=0, row=0, columnspan=4)
fileLabel=ttk.Label(content,text="Bearbeitungsnummer")
pulldownLabel=ttk.Label(content,text="Inhalte verarbeiten")
fileInput=ttk.Entry(content,textvariable=self.inputText,width=23)
self.inputText.set('A01')
#Kombinationsfeld erstellen(Als Wurzel platziert,Listenwerte können nicht bearbeitet werden(readonly)Einstellen)
self.combo = ttk.Combobox(content, state='readonly')
#Stellen Sie den Wert der Liste ein
self.combo["values"] = tuple(EXECUTE_LIST)
#Der Standardwert ist die Nahrungsmittelkosten(index=0)Einstellen
self.combo.current(0)
labelStyle=ttk.Style()
labelStyle.configure('PL.TLabel',font=('Helvetica',10,'bold'),background='white',foreground='red')
self.progressMsgBox=ttk.Label(content,textvariable=self.progressMsg,width=70,style='PL.TLabel')
self.progressMsg.set('Warten auf Bearbeitung')
self.progressBar=ttk.Progressbar(content,orient=HORIZONTAL,length=140,mode='indeterminate')
self.progressBar.configure(maximum=10,value=0)
self.progressStatusBar=ttk.Progressbar(content,orient=HORIZONTAL,length=140,mode='determinate')
executeButton=ttk.Button(content,text='Lauf',command=self.doExecute)
quiteButton=ttk.Button(content,text='Ende',command=self.quite)
fileLabel.grid(column=1, row=1,sticky='w')
fileInput.grid(column=2, row=1)
pulldownLabel.grid(column=1, row=2,sticky='w')
#Platzierung des Kombinationsfeldes
self.combo.grid(column=2, row=2)
executeButton.grid(column=1, row=6,columnspan=2,sticky='we')
quiteButton.grid(column=1, row=12,columnspan=2,sticky='we')
root.mainloop()
if __name__ == "__main__":
pythonGui=PythonGui()
pythonGui.preparation('log')
pythonGui.main()
Der Verarbeitungsinhalt ist wie folgt.
Eine zur Laufzeit aufgerufene Funktion. Der Vorgang zum Erstellen eines Bildschirms wird hier beschrieben.
Der Anfangswert des Textbereichs und der Inhalt des Kombinationsfelds werden ebenfalls erstellt.
Dieser Vorgang wird aufgerufen, wenn die Schaltfläche Ausführen gedrückt wird.
Thread wird verwendet, um einen Doppelstart zu verhindern.
Dies ist der Prozess, der tatsächlich AWS Batch aufruft.
Wenn Sie beim Aufrufen von boto3.client "aws_access_key_id" "aws_secret_access_key" "Standardregion" erhalten, müssen Sie AWS CLI nicht installieren.
Sie können dies überprüfen, indem Sie die Quelle ausführen. Wenn Sie sie jedoch als Clientanwendung verwenden möchten, erstellen Sie eine Exe mit dem folgenden Befehl. Wenn der Name der Quelldatei "pythonGui.py" lautet, lautet er wie folgt.
Wenn die exe-Datei ausgeführt wird, wird sie wie unten gezeigt als Client-Anwendung gestartet.
Das Ausführungsergebnis von AWS Batch ist das gleiche wie beim letzten Mal, daher wird es weggelassen.