Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah saya menyelesaikan masalah ketinggalan dan ketinggalan semasa menjalankan program melalui EXE?
Saya sedang membangunkan program membaca sensor di mana sebahagian daripada program melibatkan mencetak kemas kini masa nyata status sensor apabila sasaran logam bergerak lebih jauh atau lebih dekat dengan sensor. Fail "main_gui.py" akan dijalankan terlebih dahulu dan sebaik sahaja pengguna mengklik butang "Mulakan Data Retrieval", ia akan melancarkan sub-proses "ies2v2.py" di mana proses membaca sensor akan dilakukan dan dicetak.
Kod di bawah menunjukkan cara kod yang asalnya dicetak dalam konsol dicetak ke dalam gui.
def start_data_retrieval(self): # start a new thread for data retrieval threading.thread(target=self.retrieve_data_thread).start() def retrieve_data_thread(self): selected_current = loadcurrent[currentgrp.get()] selected_output = outputtype[outputgrp.get()] print(f"selected current: {selected_current}, selected output: {selected_output}") with subprocess.popen(["python", "ies2v2.py", "--port", self._port, "--current", selected_current.name, "--output", selected_output.name], stdout=subprocess.pipe, stderr=subprocess.stdout) as process: for line in process.stdout: line = line.decode() # defaulting to system encoding text_box.insert(end, line) text_box.update() text_box.see(end) process.poll()
Apabila menjalankan exe, saya mengalami kelewatan dalam mencetak penyata ke gui, sebaik sahaja butang "Mulakan Data Retrieval" diklik, data cetakan dicetak dalam sebahagian besar data dengan tergesa-gesa, dengan kelewatan yang lama sebelum Cetak semula . Moga berjalan lancar seperti pycharm...
NOTA: Saya juga menghadapi masalah mencipta exe dengan ralat seperti ini. Saya membetulkannya dengan menyalin fail yang tidak dijumpai ke dalam laluan dan exe berjalan dengan baik dari sisi saya. FYI sekiranya ini mungkin sebab kelewatan...tetapi saya rasa tidak sepatutnya.
EDIT: Di bawah kod ies2v2.py (sebahagian daripadanya) adalah bahagian yang membaca output sensor dan memastikan ia dikemas kini.
print('\n---- Reading Data ----') print("Live update of sensor data PROCESS_ADDR will begin. Press the 'Enter' key to stop the updates.") time.sleep(5) prev_process_addr = ies2.get_value(122) while True: print(f'Update of PROCESS_ADDR : {ies2.get_value(122)}') # SU new_process_addr = ies2.get_value(122) if new_process_addr != prev_process_addr: print(f"PROCESS_ADDR value changed! {prev_process_addr} to {new_process_addr}") prev_process_addr = new_process_addr if keyboard.is_pressed('enter'): print("\nKey pressed! Stopping the sensor updates.") break
Seperti yang kami temui dalam ulasan, proses kanak-kanak tidak membuang penimbal stdoutnya dan itulah yang menyebabkan kelewatan. Satu cara untuk mengepam keluaran standard adalah dengan memanggil print
函数时添加 flush=True
.
Atas ialah kandungan terperinci Bagaimanakah saya menyelesaikan masalah ketinggalan dan ketinggalan semasa menjalankan program melalui EXE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!