2012-10-08 13 views
5

मैं एक निर्देशिका के अंदर निम्नलिखित अजगर स्क्रिप्ट मेरे लिनक्स डेस्कटॉप पर 'परीक्षण' कहा जाता है:एक अजगर स्क्रिप्ट के अंदर चल रहा है कोई अन्य निर्देशिका

#!/usr/bin/python 

f = open('test.txt','w') 
f.write('testing the script') 

तो अगर मैं निर्देशिका और प्रकार अंदर जाओ यह /Home/Desktop/test/script.py

है ./script.py यह ठीक काम करता है और test.txt फ़ाइल बनाता है।

हालांकि किसी कारण से मैं डेस्कटॉप से ​​स्क्रिप्ट को चलाने में सक्षम नहीं हूं (/Home/Desktop)। उदाहरण के लिए, मैंने ./test/script.py की कोशिश की, लेकिन काम नहीं किया।

स्क्रिप्ट पर फ़ाइल अनुमतियां 755 हैं, और निर्देशिका 777 पर हैं।

किसी भी मदद की सराहना की जाएगी।

+0

क्या आप कंसोल पर देख रहे त्रुटि संदेश को प्रदान कर सकते हैं? – ernie

+0

कोई त्रुटि संदेश नहीं है, इसलिए मुझे लगता है कि स्क्रिप्ट निष्पादित हो रही है लेकिन फ़ाइल बनाने में सक्षम नहीं है। –

+0

अगर यह फ़ाइल बनाने में सक्षम नहीं था, तो इसे एक I/O त्रुटि फेंकनी चाहिए। मुझे लगता है कि यह फाइल बना रहा है, बस आप इसकी अपेक्षा नहीं करते हैं। साथ ही, जैसा कि मेरे उत्तर में बताया गया है, 'डब्ल्यू' मोड फ़ाइल को छोटा करता है, इसलिए फ़ाइल मौजूद होने पर आपको कोई परिवर्तन नहीं दिखाई देगा (संशोधित समय को छोड़कर)। – ernie

उत्तर

13

आप os.path.dirname() और __file__ उपयोग कर सकते हैं इस तरह पूर्ण पथ प्राप्त करने के लिए:।

#!/usr/bin/python 

import os # We need this module 

# Get path of the current dir, then use it to create paths: 
CURRENT_DIR = os.path.dirname(__file__) 
file_path = os.path.join(CURRENT_DIR, 'test.txt') 

# Then work using the absolute paths: 
f = open(file_path,'w') 
f.write('testing the script') 

इस प्रकार स्क्रिप्ट स्क्रिप्ट के रूप में केवल उसी निर्देशिका में रखी गई फ़ाइलों पर काम करेगा, चाहे आप इसे किस स्थान से निष्पादित करते हैं।

+0

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

+0

@ डैनियल: बिल्कुल! :) मुझे खुशी है कि मैंने मदद की। – Tadeck

+1

आपको बहुत बहुत धन्यवाद। –

0

"और इसी तरह" का मतलब बहुत अधिक नहीं है।

फ़ाइल सिस्टम में आप कहां हैं? परीक्षण निर्देशिका आपके स्थान के लिए संबंधित स्थिति क्या है?

क्या आपने पूरी तरह से योग्य मार्ग की कोशिश की है? जैसे,

/home/daniel/test/script.py 
+0

मैं डेस्कटॉप पर हूं, और 'test' निर्देशिका इसके अंदर है। मैंने इस जानकारी को शामिल करने के लिए प्रश्न संपादित किया। धन्यवाद –

1

में अपने open('test.txt', 'w') डाल open(r'./test.txt', 'w')

import os 

print os.getcwd() 

सत्यापित करने के लिए कार्यशील निर्देशिका क्या आपको लगे कि यह है कि: जब आप इसे चलाने के लिए, तुम कोशिश का उपयोग कर सकता है अजगर script.py का उपयोग करें "देखें कि अगर काम करता है

+0

आपका मतलब है पायथन का उपयोग करें ./test/script.py? जैसा कि मैंने कहा था कि मैं अपनी निर्देशिका के बाहर से स्क्रिप्ट चलाने की कोशिश कर रहा हूं। –

+0

हां। मुझे लगा कि आप पैरामीटर को 'पायथन' निष्पादन योग्य में सामान्यीकृत कर सकते हैं। – alvonellos

+0

गोचा। क्या आप भी 'आर' के बिना खुले (आर './ test.txt', 'w') या खुले ('./ test.txt', 'w') का अर्थ है)। –

0

क्या निर्देशिका आप में क्रियान्वित कर रहे हैं।।? है

1

यदि आपका सीडब्ल्यू /Desktop/test है, और फिर आप ./test/script.py निष्पादित करने का प्रयास करते हैं, तो आप /Desktop/test/test/script.py पर एक स्क्रिप्ट चलाने की कोशिश कर रहे हैं। अधिक संभावना है, आप बस ./script.py करना चाहते थे।

के रूप में एक अलग रूप में, अपने प्रश्न और अधिक उपयोगी हो गया होता यदि आप त्रुटि संदेश आप कमांड लाइन से मिला है, बजाय बस "काम नहीं किया"

स्क्रिप्ट चल रहा है और कुछ भी नहीं मुहैया कराई थी कंसोल को प्रतिबिंबित किया जाता है, अधिकतर यह काम कर रहा है। ध्यान दें कि opening a file in 'w' mode truncates the file। शायद आप एक + का उपयोग करना चाहते हैं?

+0

कोई त्रुटि संदेश नहीं है, जिसे अब मुझे एहसास होना चाहिए कि स्क्रिप्ट निष्पादित हो रही है, लेकिन फ़ाइल को खोला/बनाया नहीं जा रहा है, है ना? –

+0

@ डैनियल इस तरह लगता है - एक सैनिटी चेक के लिए प्रिंट स्टेटमेंट में डालने लायक हो सकता है। । .des test.txt मौजूद है और इसकी अनुमति क्या है? – ernie

+0

मैं यह देखने के लिए और अधिक पता लगाऊंगा कि क्या पता चल रहा है कि क्या हो रहा है। –

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