
Chia script thành nhiều module: đặt sys.path và import file Python của riêng bạn
#Python#Cấu trúc2 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Khi script dài trên 300 dòng, nên tách thành module: một file tiện ích dùng chung, một file chính. NX chạy journal từ vị trí bất kỳ nên bạn phải tự thêm thư mục vào đường dẫn tìm module.
Chia script thành nhiều moduleCác bước thực hiện
- Tạo thư mục thư viện. Ví dụ D:/NXLab/lib có file nxlab_utils.py.
- Thêm vào sys.path. Chèn thư mục chứa module vào đầu sys.path.
- Import. import nxlab_utils rồi gọi hàm.
- Tải lại khi sửa. importlib.reload để NX nhận mã mới mà không cần khởi động lại.
- Lấy thư mục theo vị trí script. Dùng file hoặc ExecutingJournal.
Code tham khảo (Python)
# ---- nxlab_utils.py (đặt trong thư mục lib) ---- import NXOpen def ten_part(part): return part.Leaf if part is not None else "(không có)" def mo_cua_so_ket_qua(): lw = NXOpen.Session.GetSession().ListingWindow lw.Open() return lw # ---- chay_chinh.py (script chính) ---- import os import sys import importlib import NXOpen THU_MUC_LIB = "D:/NXLab/lib" if THU_MUC_LIB not in sys.path: sys.path.insert(0, THU_MUC_LIB) import nxlab_utils importlib.reload(nxlab_utils) # nhận mã mới ngay khi bạn sửa module def main(): lw = nxlab_utils.mo_cua_so_ket_qua() part = NXOpen.Session.GetSession().Parts.Work lw.WriteLine("Work Part: " + nxlab_utils.ten_part(part)) if __name__ == "__main__": main()Giải thích code
- Hai file được trình bày trong cùng khối để dễ đọc; khi dùng thật hãy tách thành hai file riêng.
importlib.reloadquan trọng vì NX giữ module trong bộ nhớ giữa các lần chạy.- Đường dẫn thư viện nên là đường dẫn mạng chung để cả nhóm dùng một bản.
Lỗi thường gặp
- Đặt tên module trùng thư viện chuẩn (ví dụ
random.py) làm hỏng chương trình khác. - Quên
reloadthì sửa file mà kết quả vẫn như cũ, rất dễ gây hiểu nhầm.
Code mang tính tham khảo, viết cho NX 12 trở lên (Python journal). Tên menu và một số lớp có thể khác theo phiên bản NX; hãy chạy thử trên bản sao của chi tiết trước khi dùng cho dữ liệu thật.
Điểm: 0
Trả lời
Đăng nhập để tham gia thảo luận.