2010-07-30 11 views
6

संभव डुप्लिकेट:
check what files are open in Pythonवर्तमान में सभी खुली फ़ाइल हैंडल सूचीबद्ध करें?

हैलो,

यह सब वर्तमान में खुले फ़ाइल हैंडल की एक सूची प्राप्त करने के लिए संभव है, मुझे लगता है कि वे वातावरण में कहीं जमा हो जाती है ।

मैं थीस समारोह में दिलचस्पी है के रूप में मैं सुरक्षित रूप से किसी भी फाइल है कि खुली जब एक गंभीर त्रुटि उठाया है कर रहे हैं, अर्थात करीब फ़ाइल हैंडल संभाल और मूल फाइलों के साथ संभावित भ्रष्ट फ़ाइलों को प्रतिस्थापित करना चाहते हैं।

मेरे पास हैंडलिंग काम कर रहा है लेकिन यह जानने के बिना कि कौन से फ़ाइल हैंडल खुले हैं, मैं इस विचार को लागू करने में असमर्थ हूं।

एक तरफ, जब एक फ़ाइल हैंडल शुरू किया जाता है, तो क्या यह किसी अन्य आयातित विधि द्वारा विरासत में प्राप्त किया जा सकता है?

आप

+3

http://stackoverflow.com/questions/2023608/check-what-files-are-open-in-python – robert

+0

का डुप्लिकेट कौन सा है? और यह एक टैग के रूप में भी जोड़ने में मदद कर सकता है। – Mawg

उत्तर

3

अच्छा यह कर जब यह एक फ़ाइल को खोलता है का ट्रैक रखने के अपने कोड को संशोधित किया जाएगा के रास्ते:

def log_open(*args, **kwargs): 
    print("Opening a file...") 
    print(*args, **kwargs) 
    return open(*args, **kwargs) 

फिर, फ़ाइलों को खोलने के लिए open के बजाय log_open का उपयोग करें। आप खुद को लॉग इन करने के लिए File कक्षा को संशोधित करने की तरह कुछ और हैकी भी कर सकते हैं। यह उपरोक्त लिंक किए गए प्रश्न में शामिल है।

वहाँ शायद एक घृणित, गंदी हैक कचरा कलेक्टर से जुड़े या __dict__ या कुछ में देख है, लेकिन आप क्या करने के लिए नहीं करना चाहती है कि जब तक आप बिल्कुल सच वास्तव में गंभीरता से चाहिए

5

lsof धन्यवाद,/proc/पीआईडी ​​/ fd/

0

आप अजगर उपयोग कर रहे हैं 2.5+ आप with कीवर्ड का उपयोग कर सकते हैं (हालांकि भविष्य आयात with_statement से 2.5 जरूरतों `)

with open('filename.txt', 'r') as f: 
    #do stuff here 
    pass 
#here f has been closed and disposed properly - even with raised exceptions 

मैं नहीं जानता कि विपत्तिपूर्ण विफलता की किस तरह बोर्क करने की जरूरत है with कथन, लेकिन मुझे लगता है कि यह वास्तव में एक बुरा है। WinXP, मेरे त्वरित अवैज्ञानिक परीक्षण पर:

import time 
with open('test.txt', 'w') as f: 
    f.write('testing\n') 
    while True: 
     time.sleep(1) 

और उसके बाद Windows कार्य प्रबंधक के साथ प्रक्रिया की हत्या अभी भी फाइल करने के लिए डेटा लिखा था।

संबंधित मुद्दे