
Đọc và ghi file cấu hình JSON cho script NX: đường dẫn, dung sai, danh sách vật liệu
#Python#Cấu hình1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Đừng viết cứng đường dẫn và tham số trong code. Một file JSON cạnh script cho phép người không biết lập trình sửa cấu hình, còn code giữ nguyên.
Đọc và ghi file cấu hình JSON cho script NXCác bước thực hiện
- Thiết kế cấu hình. Chỉ đưa vào các giá trị người dùng cần đổi: thư mục xuất, đơn vị, danh sách vật liệu.
- Tìm file cạnh script. Dùng os.path.dirname(file).
- Đọc với giá trị mặc định. Không có file hoặc thiếu khóa thì dùng mặc định.
- Kiểm tra giá trị. Chuyển kiểu, giới hạn khoảng hợp lệ.
- Ghi lại. Có thể lưu cấu hình mặc định lần chạy đầu.
Code tham khảo (Python)
import json import os import NXOpen MAC_DINH = { "thu_muc_xuat": "D:/NXLab_xuat", "don_vi": "mm", "dung_sai": 0.05, "vat_lieu": ["S45C", "SUS304", "AL6061"], } def doc_cau_hinh(ten_file="cau_hinh.json"): thu_muc = os.path.dirname(os.path.abspath(__file__)) duong_dan = os.path.join(thu_muc, ten_file) cfg = dict(MAC_DINH) if os.path.isfile(duong_dan): with open(duong_dan, "r", encoding="utf-8") as f: cfg.update(json.load(f)) else: # lần đầu: tạo file mẫu cho người dùng sửa with open(duong_dan, "w", encoding="utf-8") as f: json.dump(MAC_DINH, f, ensure_ascii=False, indent=2) cfg["dung_sai"] = max(0.001, float(cfg["dung_sai"])) return cfg def main(): lw = NXOpen.Session.GetSession().ListingWindow lw.Open() cfg = doc_cau_hinh() for k, v in cfg.items(): lw.WriteLine("%-14s = %s" % (k, v)) if __name__ == "__main__": main()Giải thích code
ensure_ascii=Falsegiữ tiếng Việt nguyên dạng trong file JSON.cfg.update(...)ghi đè từng khóa, các khóa thiếu giữ mặc định.max(0.001, ...)chặn giá trị dung sai vô lý do gõ nhầm.
Lỗi thường gặp
__file__có thể không tồn tại nếu journal được chạy theo cách không qua file; khi đó dùngsession.ExecutingJournal.- File JSON lỗi cú pháp sẽ làm script dừng; bọc
json.loadbằng try/except và báo rõ dòng lỗi.
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.