2011-04-07 10 views
9

के लिए अस्थायी फ़ाइल एसोसिएशन मुझे विशिष्ट पायथन संस्करण के साथ निष्पादित करने के लिए .py फ़ाइलों के लिए एसोसिएशन सेट करने की आवश्यकता है। लेकिन मुझे केवल एक cmd.exe सत्र के लिए इस संगठन को बनाने की आवश्यकता है (समानांतर सत्र प्रभावित नहीं होना चाहिए)। क्या विंडोज़ इसे अनुमति देता है?सिंगल cmd.exe सत्र

मुझे संदेह है कि उत्तर नहीं है, लेकिन मैं virtualenv में ऐसी सुविधा प्राप्त करने के विचार को फेंकने से पहले कुछ सबूत देखना चाहता हूं।

+0

मामूली समाधान फ़ाइल संगठनों पर भरोसा करने के बजाए कमांड लाइन में इच्छित पायथन का नाम देना है जो बस इसके लिए कट नहीं किया जाता है। –

+0

मेरे पास पहले से ही पाइथन 32, पायथन 27 नामक कई पायथन दुभाषिया हैं। जो मैं चाहता हूं वह इस वर्चुअलनव सत्र के लिए कमांड लाइन में दुभाषिया निर्दिष्ट करने से बचें। –

उत्तर

8

निश्चित रूप से आप कर सकते हैं।

तो यह संभव है पर्यावरण चर के साथ फ़ाइल संबद्धता को परिवर्तित करना - - तुम बहुत जेकब्स जवाब देने के लिए अपनी टिप्पणी में जवाब देने के लिए करीब थे यह आपकी मदद करेगा, लेकिन यह संभव नहीं लगता है।

यह संभव है। आपको केवल REG_EXPAND_SZ कुंजी की मान में रजिस्ट्री कुंजी और पर्यावरण चर का उपयोग करना है। उदाहरण
%python_home%\python %1 %*
की
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Python.File\shell\open\command
कुंजी (Default) मूल्य के रूप में डाल और REG_EXPAND_SZ लिए अपने मूल्य निर्धारित करने के लिए क्या अजगर अपने अजगर फाइलों के साथ खोला जाएगा परिभाषित करने के लिए संभव बनाता है। आप python_home पर्यावरण चर सेट करके तय करते हैं और आप पाठ्यक्रम के प्रति कमांड लाइन सत्र कर सकते हैं।where in the registry does Windows store, with which program to open certain file types?

पर मेरे उत्तर पर एक नज़र डालें, यह कहकर कि अब इस समस्या को हल करने के लिए विशेष उपकरण है जो मैं अत्यधिक अनुशंसा करता हूं। इसे pylauncher कहा जाता है। दस्तावेज़ों से:

पीईपी 397 विंडोज के तहत पायथन के लिए अनुकूल लॉन्चर। स्क्रीनकास्ट

के लिए पीईपी के लिए http://www.python.org/dev/peps/pep-0397/, http://www.red-dove.com/screencasts/launcher/launcher.html देखें तुम भी .py विस्तार को छोड़ सकते हैं यदि आप इसे PATHEXT वातावरण चर में जोड़ें। प्रश्न देखें What environment variables will be used when calling an EXE from command line?

+2

यह बहुत अच्छा काम करता है। और मेरा मानना ​​है कि इस तरह अपने पर्यावरण को स्थापित करना महत्वपूर्ण है, अन्यथा आप गलत दुभाषिया पायथन उदाहरण को ध्यान में रखकर गलत निष्कर्षों पर जा सकते हैं। यह वह जगह है मैं इसे कैसे * सेटअप एक खाली virtaulenv ENV * VIRTUAL_ENV है प्रणाली env वर की ओर इशारा करते यह * संबद्धता को बदलने के VIRTUAL_ENV पर आधारित है, रिश्तेदार होने के लिए 'reg जोड़ने HKEY_CLASSES_ROOT \ Python.File \ खोल \ करने के लिए किया था खुला \ command/ve/t REG_EXPAND_SZ/d "\"% VIRTUAL_ENV% \ स्क्रिप्ट \ python.exe \ "\"% 1 \ "% *" ' * पर्यावरण को सक्रिय करने, VIRTUAL_ENV – xverges

+1

अच्छा मान बदलता है! +1 यह * उत्तर * मेरा प्रश्न [विंडोज़ पर वर्चुअलएन्व क्यों नहीं है। Pypyon execables के वर्चुअलएन्व संस्करण के साथ .py/.pyw/.pyo/.pyc फ़ाइलों को संबद्ध करता है?] (Http://stackoverflow.com/questions/4879624/) –

+0

हालांकि यह अच्छा होगा कि यह आभासी :) virtualenv बनाना न पड़े। कुछ रास्ता होना चाहिए ... –

0

आप temp एसोसिएशन सेट करने के लिए विंडोज सेट कमांड का उपयोग कर सकते हैं, तब तक सेट तब तक टिकेगा जब तक कि शैल सिस्टम परिवेश चर से जुड़ा न हो।

+1

यदि यह सत्य है, तो कृपया अपने उत्तर में एक उदाहरण जोड़ें। – martineau

+1

'सेट' पर्यावरण चर बदलता है, प्रश्न फ़ाइल एसोसिएशन के बारे में पूछता है, एक पूरी तरह से अलग बात है। –

+0

यदि पर्यावरण चर के साथ फ़ाइल एसोसिएशन को बदलना संभव है - इससे मदद मिलेगी, लेकिन ऐसा प्रतीत नहीं होता है। –

3

विंडोज़ में आप assoc और ftype आदेशों का उपयोग करके कमांड लाइन से फ़ाइल एसोसिएशन बदल सकते हैं (Windows Command-line Reference देखें)।

आप देख सकते हैं क्या फ़ाइल प्रकार वर्तमान में assoc आदेश का उपयोग .py फ़ाइलों से संबद्ध है:

> assoc .py 
.py=Python.File 

जानकारी की मदद से आप तो देखने के लिए क्या कार्यक्रम वर्तमान में उपयोग कर Python.File फ़ाइल प्रकार से संबद्ध है जाँच कर सकते हैं ftype आदेश:

> ftype Python.File 
Python.File="C:\Python2.6\python.exe" "%1" %* 

तुम भी उपयोग कर सकते हैं ftype जुड़े कार्यक्रम को बदलने के लिए:

> ftype Python.File="C:\Python2.7\python.exe" "%1" %* 
Python.File="C:\Python2.7\python.exe" "%1" %* 

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

cmd.exe स्वयं /k पैरामीटर स्वीकार करता है, जिसे आप प्रारंभ में बैच फ़ाइल निष्पादित करने के लिए उपयोग कर सकते हैं जो प्रारंभ में इच्छित फ़ाइल एसोसिएशन सेट करता है। इसके बाद आप कस्टम quit.bat भी प्रदान कर सकते हैं जो cmd सत्र से बाहर निकलने से पहले इसे पुनर्स्थापित कर देगा।

+0

मुझे cmd.exe सत्र तक सीमित होने के लिए फ़ाइल एसोसिएशन के दायरे की आवश्यकता है, यानी समानांतर cmd सत्र (विभिन्न पायथन वर्चुअलनेव के साथ) चाहिए प्रभावित नहीं –

+0

@techtonik: विंडोज एसोसिएशन पर वैश्विक ओएस रजिस्ट्री का एक फ़ंक्शन है, इसलिए ऐसा लगता है कि आपको स्क्रिप्ट निष्पादित करने के लिए उपयोग किए जाने वाले पायथन दुभाषिया का कौन सा संस्करण स्पष्ट रूप से निर्दिष्ट करना होगा। यह अस्पष्ट है कि आप इतनी बुरी तरह से ऐसा क्यों करना चाहते हैं क्योंकि यह 'cmd.exe' सत्र में/एसोसिएशन सेट अप करने से भी बदतर नहीं लगता है। – martineau

+0

समस्या यह है कि जब उपयोगकर्ता उदाहरण के लिए 'django-admin.py' निष्पादित करते हैं, तो इसे डिफ़ॉल्ट पायथन के साथ निष्पादित किया जाता है, वर्चुअलएन्व में स्थापित नहीं, और स्क्रिप्ट विफल हो जाती है। हालांकि सभी निर्देशों को फिर से लिखना और 'पायथन' उपसर्ग जोड़ना संभव है, लेकिन यदि संभव हो तो मैं इससे बचना चाहूंगा। –

1

आपकी सबसे अच्छी शर्त शायद स्क्रिप्ट में पैथ चर सेट करने जा रही है और python script.py लिखकर पायथन का आह्वान करेगी। फाइल एसोसिएशन वैश्विक हैं और प्रक्रियाओं के बीच साझा किया जाता है। पर्यावरण चर एक प्रक्रिया के लिए स्थानीय हैं और इसलिए मैं इस समाधान का सुझाव देता हूं।

+0

पाथ पहले ही आवश्यकतानुसार सेट है। मैं हर बार टाइपिंग पायथन से बचना चाहता हूं। –

+0

फ़ाइल संघ वैश्विक हैं और प्रक्रियाओं में साझा किए गए हैं। –

+0

तो, आप पुष्टि करते हैं कि एक cmd.exe सत्र में 'script.py' को पीएटीएच में दुभाषिया डालने और स्क्रिप्ट को' python script.py' के रूप में चलाने के बिना 'script.py' चलाने का कोई तरीका नहीं है? –

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