בעיה בבניית CNC בפייתון
-
אני עדיין לא יודע מה אתה מצפה שהקוד יעשה, כי הבאת את כולו.
בכל מקרה הדבר הראשון שקופץ לי זה שאתה מיד מתחיל עם socket.recv גם בקליינט וגם בשרת מיד לאחר יצירת החיבור, זה אומר שהתוכנה תהיה תקועה עד שמישהו ישלח משהו, זה deadlock.
א'. תלמד על הספריה select שנועדה עבור דברים כאלה.
ב'. אל תקרא לrecv סתם, תשתמש בזה כשאתה באמת מצפה לקבל משהו מהצד השני. -
@חגי כתב בבעיה בבניית CNC בפייתון:
ב'. אל תקרא לrecv סתם, תשתמש בזה כשאתה באמת מצפה לקבל משהו מהצד השני.
הסרבר מתחיל בsend והקליינט בrecv
הrecv בסרבר שבא אחרי הif נועד כדי לוודא שגם הקליינט נכנס לפונקצייה@Android כתב בבעיה בבניית CNC בפייתון:
if command == "file":
output = client_socket.recv(2048).decode()
file() -
@Android אני לא טוען שמשהו מיותר, פשוט שהעלת הרבה קוד, ולי באופן אישי אין את הסבלנות לנסות לבודד מאיפה נובע הבאג.
אם אתה היית מצליח לבודד שורה שורה (היינו לדבג) ולמצוא איפה זה נכשל, ואז היית מכוון בדיוק לשורה ששם זה נכשל, אז יכול להיות שהיה יותר קל לענות לך.
-
@Android
זה נשמע כמו deadlock, לדבג זה מאוד פשוט, אתה דוחף print דיסקרפטיבי בכל מקום עד שאתה מוצא באיזו שורה זה נתקע.
למי שיש יותר כח רצון, אפשר להשתמש בpdbimport pdb;pdb.set_trace();
מי שממש רוצה ללכת על כל הקופה וזורם לו אדרנלין בדם, והחיים עוד לפניו, יכול להשתמש בכלי הדיבוג של vscode לפייתון, או בpycharm. אבל זה רק אם אתה ממש מוכן לזה.
-
@dovid
חחח זאת היתה בדיחה בגלל שהוא כתב שהוא עדיין לא יודע לדבג, זה בעיקרון הפיתרון הכי מתבקש,
האפשרות הכי קלה היא באמצעות print, האפשרות הכי קשה (אבל הופכת אותך להיות מאוד גזעי, בעיקר כשאתה לומד סייבר) זה להשתמש בpdb.
האפשרות הנורמלית באמת זה להשתמש בכלי דיבוג של IDE כלשהו כמו pycharm. -
@Android אני בחיים (נראה לי) לא כתבתי בפייתון,
אבל זה לא אמור להיות מסובך וזה יכול מאוד לקדם אותך גם אם אתה לא חושב להיות מתכנת אלא איש סייבר.
מחיפוש גוגל נראה שיש מקורות טובים, תשתדל לבדוק:
אם אתה מעדיף טקסטואלי
https://www.jetbrains.com/help/pycharm/debugging-your-first-python-application.html