2025, Oct 31 13:32

PyVISA के DEBUG लॉग छुपाने का आसान तरीका: Python logging सेटअप

PyVISA के DEBUG:pyvisa शोर को रोकें: Python standard logging से आउटपुट म्यूट करें या pyvisa लॉगर को INFO पर सेट करें. साफ़ कंसोल और इंस्ट्रुमेंट कंट्रोल हेतु तैयार उदाहरण कोड।

जब आप PyVISA के साथ USB पर उपकरणों को ऑटोमेट करते हैं, तो कंसोल अचानक “DEBUG:pyvisa:…” जैसी पंक्तियों से भर सकता है। एप्लिकेशन चलता रहता है, लेकिन आपकी अपनी डायग्नोस्टिक संदेश भीड़ में दब जाते हैं। अच्छी खबर यह है कि यह PyVISA का “print” नहीं है; यह Python की मानक लॉगिंग है। जैसे ही आप लॉगिंग को नियंत्रित करते हैं, यह शोर गायब हो जाता है।

ऐसा उदाहरण जो शोरभरा आउटपुट शुरू कर देता है

नीचे दी गई फ़ंक्शन एक डिटेक्टर को चलाती है, गेन और ऑफ़सेट चुनती है, लो-पास फ़्रीक्वेंसी सेट करती है, माप फ़ंक्शन को ऑन/ऑफ करती है और अंत में सत्र बंद कर देती है। तर्क वही है, बस स्पष्टता के लिए नाम बदले गए हैं।

def pmt_switch_test(gain_idx=0, offset_v=-0.009, lp_hz=80000000):
    gain_v = PMT1_gain_map['voltage'].iloc[int(gain_idx)]
    import pyvisa
    import time
    mgr = pyvisa.ResourceManager()
    dev = mgr.open_resource(pmt1_addr)
    dev.write("INST:SEL GAIN")
    dev.write("SOUR:VOLT %f" % gain_v)
    dev.write("INST:SEL OFFSET")
    dev.write("SOUR:VOLT %f" % offset_v)
    dev.write("SENS:FILT:LPAS:FREQ %f" % lp_hz)
    dev.write("SENS:FUNC:ON %s" % pmt_model)
    time.sleep(5)
    dev.write("SENS:FUNC:OFF %s" % pmt_model)
    mgr.close()

जिन सिस्टमों में लॉगिंग DEBUG स्तर पर कॉन्फ़िगर है, वहां ResourceManager बनाने और SCPI कमांड भेजने पर “DEBUG:pyvisa” से शुरू होने वाली कई पंक्तियाँ दिखती हैं।

असल में हो क्या रहा है

जो पंक्तियाँ “DEBUG:pyvisa:…” जैसी दिखती हैं, वे Python के मानक logging मॉड्यूल से आती हैं। PyVISA DEBUG-स्तरीय लॉग भेजता है; यदि आपका प्रोसेस लॉगिंग को DEBUG पर सेट करता है, तो वे दिखेंगी। अगर लॉगिंग DEBUG पर नहीं है, तो वे नहीं दिखेंगी। यही वजह है कि लॉगिंग स्तर बदलते ही वे पंक्तियाँ आना-रुकना शुरू कर देती हैं।

शोर थामने के दो व्यवहारिक तरीके

अगर केवल कंसोल शांत चाहिए, तो लॉगिंग पूरी तरह निष्क्रिय कर दें। और यदि आप अपने लॉग जारी रखना चाहते हैं पर PyVISA की अंदरूनी बातें छिपानी हैं, तो “pyvisa” नाम वाले लॉगर को निशाना बनाएं। दोनों तरीक़े नीचे दिए हैं।

विकल्प 1: पूरी लॉगिंग बंद करें

import pyvisa
import logging
# पहले की कोई भी लॉगिंग सेटअप बनी रह सकती है; यह कॉल सब कुछ म्यूट कर देती है
logging.disable()
rm = pyvisa.ResourceManager()       # PyVISA की DEBUG पंक्तियाँ नहीं आएँगी
print(rm.list_resources())          # कंसोल अब भी शांत रहेगा

विकल्प 2: अपने लॉग रखें, PyVISA के छिपाएँ

यह सेटअप “pyvisa” लॉगर का स्तर बढ़ाकर PyVISA की DEBUG बकचक दबा देता है, जबकि आपके अपने DEBUG और INFO संदेश बने रहते हैं।

import pyvisa
import logging
# एप्लिकेशन-स्तर की लॉगिंग सक्षम करें
logging.basicConfig(level=logging.DEBUG)
# केवल PyVISA के लॉगर को लक्षित करें
pyvisa_logger = logging.getLogger('pyvisa')
pyvisa_logger.level = logging.INFO
logging.debug('app debug visible')   # यह दिखेगा
logging.info('app info visible')     # यह दिखेगा
rm = pyvisa.ResourceManager()        # PyVISA की DEBUG पंक्तियाँ छिपी रहेंगी
print(rm.list_resources())           # PyVISA की DEBUG छिपी रहती है

डिवाइस नियंत्रण कोड में इसे लागू करना

यहाँ वही डिटेक्टर रूटीन लक्षित लॉगिंग कॉन्फ़िगरेशन के साथ दिया है, ताकि आपके एप्लिकेशन के लॉग पठनीय रहें और PyVISA का DEBUG आउटपुट दबा रहे।

import logging
import pyvisa
import time
# अपने लॉग रखें; PyVISA का DEBUG छिपाएँ
logging.basicConfig(level=logging.DEBUG)
logging.getLogger('pyvisa').level = logging.INFO
def pmt_switch_test(gain_idx=0, offset_v=-0.009, lp_hz=80000000):
    gain_v = PMT1_gain_map['voltage'].iloc[int(gain_idx)]
    mgr = pyvisa.ResourceManager()
    dev = mgr.open_resource(pmt1_addr)
    dev.write("INST:SEL GAIN")
    dev.write("SOUR:VOLT %f" % gain_v)
    dev.write("INST:SEL OFFSET")
    dev.write("SOUR:VOLT %f" % offset_v)
    dev.write("SENS:FILT:LPAS:FREQ %f" % lp_hz)
    dev.write("SENS:FUNC:ON %s" % pmt_model)
    time.sleep(5)
    dev.write("SENS:FUNC:OFF %s" % pmt_model)
    mgr.close()

यह जानना क्यों उपयोगी है

यह समझना कि ये पंक्तियाँ मनमानी प्रिंट नहीं बल्कि मानक लॉगिंग आउटपुट हैं, आपको सटीक नियंत्रण देता है। आप अपनी डायग्नोस्टिक्स खोए बिना थर्ड-पार्टी लाइब्रेरीज़ को शांत कर सकते हैं, और गहराई वाले ट्रेस तभी चालू कर सकते हैं जब सच में ज़रूरत हो। यह एक सरल उपाय है जो कंसोल-आधारित वर्कफ़्लो में सिग्नल-टू-नॉइज़ वापस लाता है।

मुख्य बातें

यदि कंसोल में “DEBUG:pyvisa:…” पंक्तियाँ दिख रही हैं, तो यह Python की DEBUG-स्तर वाली लॉगिंग है। सब कुछ शांत चाहिए तो logging.disable() बुलाएँ। केवल PyVISA को शांत रखना हो तो logging.getLogger('pyvisa').level को INFO या उससे ऊपर सेट करें। अपने डिवाइस कोड को बदले बिना रखें; बस ResourceManager बनाने या इंस्ट्रूमेंट से बात करने से पहले लॉगिंग सही तरह कॉन्फ़िगर करें।

यह लेख StackOverflow के एक प्रश्न और ndaig द्वारा पूछे गए सवाल तथा furas के उत्तर पर आधारित है।