ฉันมีโครงการงูหลามขนาดเล็กที่มีโครงสร้างดังต่อไปนี้ -
Project
-- pkg01
-- test01.py
-- pkg02
-- test02.py
-- logging.conf
ฉันวางแผนที่จะใช้โมดูลบันทึกเริ่มต้นเพื่อพิมพ์ข้อความไปยัง stdout และไฟล์บันทึก ในการใช้โมดูลการบันทึกจำเป็นต้องเริ่มต้นบางอย่าง -
import logging.config
logging.config.fileConfig('logging.conf')
logger = logging.getLogger('pyApp')
logger.info('testing')
ในปัจจุบันฉันทำการเริ่มต้นนี้ในทุกโมดูลก่อนที่ฉันจะเริ่มบันทึกข้อความ เป็นไปได้หรือไม่ที่จะทำการเริ่มต้นนี้เพียงครั้งเดียวในที่เดียวซึ่งการตั้งค่าเดียวกันนี้สามารถนำกลับมาใช้ใหม่ได้โดยการบันทึกทั่วทั้งโครงการ?
package/__init__.py
หญิงบอกว่าคุณควรใส่รหัสการเข้าสู่ระบบการตั้งค่าใน ปกติแล้วสถานที่ที่คุณใส่if __name__ == '__main__'
รหัสจะไม่ใช่สถานที่ นอกจากนี้ตัวอย่างของ prost ดูเหมือนว่าจะเรียกรหัสการกำหนดค่าโดยไม่มีเงื่อนไขเมื่อนำเข้าซึ่งไม่ได้ดูเหมาะสมกับฉัน โดยทั่วไปแล้วรหัสการกำหนดค่าการบันทึกควรทำในที่เดียวและไม่ควรเกิดผลข้างเคียงของการนำเข้ายกเว้นเมื่อคุณกำลังนำเข้า __main__
if __name__ == '__main__'
? (ไม่ได้กล่าวถึงอย่างชัดเจนในคำถามหากเป็นกรณีนี้)
fileConfig
ในทุกโมดูลที่เข้าสู่ระบบเว้นแต่คุณจะมีif __name__ == '__main__'
เหตุผลในทุกข้อ คำตอบที่หญิงไม่ได้เป็นวิธีปฏิบัติที่ดีถ้าแพคเกจเป็นห้องสมุดแม้ว่ามันอาจจะทำงานให้คุณ - หนึ่งไม่ควรเข้าสู่ระบบการกำหนดค่าในแพคเกจห้องสมุดอื่น ๆNullHandler
กว่าจะเพิ่ม