
Cơ chế cập nhật phiên bản tự động: so sánh VERSION trên ổ chung và hỏi người dùng nâng cấp
#Triển khai#Python1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Khi sửa lỗi, bạn muốn mọi người nhận bản mới mà không phải đi từng máy. Mỗi lần khởi động (hoặc khi bấm nút), script so sánh phiên bản cục bộ với phiên bản trên ổ chung và đề nghị cập nhật.
Cơ chế cập nhật phiên bản tự độngCác bước thực hiện
- Đọc VERSION cục bộ và trên ổ chung. File một dòng 1.3.0.
- So sánh theo số. Tách thành bộ ba số nguyên.
- Hỏi người dùng. Hộp thoại có/không.
- Chép bản mới. Ghi đè an toàn có sao lưu.
- Ghi lại. Log phiên bản đã nâng.
Code tham khảo (Python)
import os import shutil import NXOpen CUC_BO = "C:/NXLab" TREN_MAY_CHU = "//may-chu/ky_thuat/nxlab-tools" def doc_phien_ban(thu_muc): duong_dan = os.path.join(thu_muc, "VERSION") if not os.path.isfile(duong_dan): return (0, 0, 0) with open(duong_dan, "r", encoding="utf-8") as f: return tuple(int(x) for x in f.read().strip().split(".")) def dinh_dang(v): return ".".join(str(x) for x in v) def cap_nhat_neu_co_ban_moi(session): try: cu, moi = doc_phien_ban(CUC_BO), doc_phien_ban(TREN_MAY_CHU) except (OSError, ValueError): return "Không kiểm tra được phiên bản mới (mất kết nối ổ chung?)" if moi <= cu: return "Đang dùng bản mới nhất (%s)" % dinh_dang(cu) if not session.IsBatch: kq = NXOpen.UI.GetUI().NXMessageBox.Show( "NX Lab", NXOpen.NXMessageBox.DialogType.Question, "Có bản mới %s (đang dùng %s). Cập nhật bây giờ?" % (dinh_dang(moi), dinh_dang(cu))) if kq != 1: return "Người dùng chọn cập nhật sau" sao_luu = CUC_BO + "_cu" if os.path.isdir(sao_luu): shutil.rmtree(sao_luu) shutil.copytree(CUC_BO, sao_luu) for goc, _, files in os.walk(TREN_MAY_CHU): dich = os.path.join(CUC_BO, os.path.relpath(goc, TREN_MAY_CHU)) os.makedirs(dich, exist_ok=True) for f in files: shutil.copy2(os.path.join(goc, f), os.path.join(dich, f)) return "Đã cập nhật lên %s. Khởi động lại NX để áp dụng." % dinh_dang(moi) def main(): session = NXOpen.Session.GetSession() lw = session.ListingWindow lw.Open() lw.WriteLine(cap_nhat_neu_co_ban_moi(session)) if __name__ == "__main__": main()Giải thích code
- So sánh phiên bản bằng tuple số nguyên:
(1, 10, 0) > (1, 9, 5)đúng, khác với so sánh chuỗi. - Mọi lỗi mạng trả thông báo nhẹ nhàng, không làm hỏng việc khởi động.
- Luôn sao lưu bản cũ trước khi ghi đè để quay lại khi cần.
Lỗi thường gặp
- Đang chạy script từ chính thư mục bị ghi đè có thể gây lỗi; chạy bước cập nhật từ bản sao tạm hoặc trước khi nạp thư viện.
- Không tự cập nhật trong giờ cao điểm; cho người dùng quyền hoãn.
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.