मैं अनुभव से जानता हूं कि अगर मैं एक ही समय में कई टर्मिनलों में एक ही फाइल को विम में खोलने की कोशिश करता हूं, तो मुझे एक त्रुटि मिलती है। (शायद अस्थायी फाइलों के कारण?)

और मैं अनुभव से जानता हूं कि अगर मैं पायथन में एक टेक्स्ट फ़ाइल खोलता हूं और इसके माध्यम से पढ़ता हूं, तो मुझे पूरा होने पर पॉइंटर को रीसेट करना होगा।

लेकिन मैंने पाया है कि अगर मैं एक ही समय में कई टर्मिनलों में एक ही पायथन स्क्रिप्ट चलाता हूं, तो मुझे कोई त्रुटि नहीं मिलती है; यह दोनों में स्क्रिप्ट को सफलतापूर्वक चलाता है। यह कैसे काम करता है? क्या पाइथन को इसे चलाने के लिए मेरी स्क्रिप्ट को शुरू से ही पढ़ने की ज़रूरत नहीं है? क्या स्क्रिप्ट को एक अस्थायी फ़ाइल, या कुछ और में कॉपी किया गया है?

-2
Jeon 23 जिंदा 2020, 10:57

2 जवाब

मैं अनुभव से जानता हूं कि अगर मैं एक ही समय में कई टर्मिनलों में एक ही फाइल को विम में खोलने की कोशिश करता हूं, तो मुझे एक त्रुटि मिलती है।

यह वास्तव में सच नहीं है। विम वास्तव में आपको एक ही फ़ाइल को एक ही समय में एकाधिक टर्मिनलों में खोलने देता है; यह सिर्फ इतना है कि यह आपको यह बताने के लिए पहले चेतावनी देता है कि ऐसा हो रहा है, ताकि आप परिवर्तन करने से पहले गर्भपात कर सकें। (विम के दो अलग-अलग उदाहरणों में फ़ाइल को समवर्ती रूप से संशोधित करना सुरक्षित नहीं है, क्योंकि दो उदाहरण बिल्कुल समन्वयित नहीं होंगे।)

इसके अलावा, विम आपको यह चेतावनी केवल तभी देगा जब आप एक ही फ़ाइल को संपादन के लिए एक ही समय में एकाधिक टर्मिनलों में खोलने का प्रयास करेंगे। यदि आप फ़ाइल को केवल पढ़ने के लिए खोल रहे हैं (-R ध्वज का उपयोग करके) तो यह शिकायत नहीं करेगा।

और मैं अनुभव से जानता हूं कि अगर मैं पायथन में एक टेक्स्ट फ़ाइल खोलता हूं और इसके माध्यम से पढ़ता हूं, तो मुझे पूरा होने पर पॉइंटर को रीसेट करना होगा।

यह भी बिल्कुल सच नहीं है। यदि आप open को कई अलग-अलग कॉल करते हैं, तो आपके पास कई अलग-अलग फ़ाइल ऑब्जेक्ट होंगे, और प्रत्येक अलग-अलग फ़ाइल में अपनी स्थिति बनाए रखेगा। तो कुछ

with open('filename.txt', 'r') as first:
    with open('filename.txt', 'r') as second:
        print(first.read())
        print(second.read())

Filename.txt की पूरी सामग्री को दो बार प्रिंट करेगा।

जब आप किसी फ़ाइल को पढ़ चुके होते हैं तो आपको स्थिति को रीसेट करने का एकमात्र कारण यह है कि यदि आप फ़ाइल को फिर से पढ़ने के लिए उसी फ़ाइल ऑब्जेक्ट का उपयोग करना चाहते हैं, या यदि आपने फ़ाइल को रीड/राइट मोड में खोला है (r के बजाय r+) और अब आप पढ़ने से लेखन पर स्विच करना चाहते हैं।

लेकिन मैंने पाया है कि अगर मैं एक ही समय में कई टर्मिनलों में एक ही पायथन स्क्रिप्ट चलाता हूं, तो मुझे कोई त्रुटि नहीं मिलती है; यह दोनों में स्क्रिप्ट को सफलतापूर्वक चलाता है। यह कैसे काम करता है? क्या पाइथन को इसे चलाने के लिए मेरी स्क्रिप्ट को शुरू से ही पढ़ने की ज़रूरत नहीं है? क्या स्क्रिप्ट को एक अस्थायी फ़ाइल, या कुछ और में कॉपी किया गया है?

जैसा कि मुझे लगता है कि अब स्पष्ट होना चाहिए - यहाँ कोई समस्या नहीं है। ऐसा कोई कारण नहीं है कि Python के दो इंस्टेंस नहीं दोनों एक ही समय में एक ही स्क्रिप्ट फ़ाइल को पढ़ सकते हैं। लिनक्स इसकी अनुमति देता है। (और वास्तव में, यदि आप फ़ाइल को हटाते हैं, तो Linux फ़ाइल को डिस्क पर तब तक रखेगा जब तक कि जिन प्रोग्रामों ने इसे खोला था, वे या तो इसे बंद कर देते हैं या बाहर निकल जाते हैं।)

वास्तव में, ऐसा कोई कारण भी नहीं है कि दो प्रक्रियाएं एक ही समय में एक ही फाइल पर लिख नहीं लिख सकतीं, हालांकि यहां आपको उन प्रक्रियाओं से बचने के लिए बहुत सावधान रहना होगा जो एक-दूसरे के लिए समस्या पैदा कर रही हैं या उन्हें दूषित कर रही हैं। फ़ाइल।

0
ruakh 24 जिंदा 2020, 01:47

टर्मिनल सिर्फ उस आदेश को चला रहा है जिसे आपने इसे निष्पादित करने के लिए कहा था, कोई सूचक या कुछ भी नहीं है जो आप करते हैं

-1
Danyal Najeeb 23 जिंदा 2020, 11:02