मैं webbrowser मॉड्यूल की लाइनों के साथ कुछ सोच रहा हूं, लेकिन फ़ाइल ब्राउज़र के लिए। विंडोज़ में मैं एक्सप्लोरर खोलना चाहता हूं, लिनक्स पर गनोम में, मैं नॉटिलस, केडीई पर कॉन्करर, आदि खोलना चाहता हूं। अगर मैं इससे बच सकता हूं तो मैं इसे अपनाना नहीं चाहता हूं। ;-)क्या Python में एक फ़ाइल ब्राउज़र खोलने के लिए एक क्रॉस-प्लेटफार्म तरीका है?
उत्तर
अगर मैं इससे बच सकता हूं तो मैं इसे अपनाना नहीं चाहता हूं।
Weeell मुझे लगता है कि आप मंच-सूँघने kludge का एक छोटा सा की जरूरत करने जा रहे हैं, लेकिन भयंकर कमांड सूँघने webbrowser
मॉड्यूल के रूप में उम्मीद है कि के रूप में ज्यादा नहीं। यहां एक पहला स्टैब है:
if sys.platform=='win32':
subprocess.Popen(['start', d], shell= True)
elif sys.platform=='darwin':
subprocess.Popen(['open', d])
else:
try:
subprocess.Popen(['xdg-open', d])
except OSError:
# er, think of something else to try
# xdg-open *should* be supported by recent Gnome, KDE, Xfce
नोट करें कि Win32 संस्करण वर्तमान में फ़ाइल नामों में रिक्त स्थान के लिए विफल हो जाएगा। Bug 2304 इसके साथ कुछ करने के लिए हो सकता है, लेकिन पैरामीटर से बचने और विंडोज शैल (cmd /c ...
) के साथ एक मूल समस्या प्रतीत होती है, जिसमें आप डबल-कोट्स घोंसला नहीं कर सकते हैं और आप^-स्केप उद्धरण या रिक्त स्थान नहीं कर सकते । मुझे कमांड लाइन से cmd /c start C:\Documents and Settings
उद्धरण और चलाने का कोई तरीका नहीं मिला है।
nosklo की टिप्पणी फिर से अनुमानित समय ही Windows पर, वहाँ एक अंतर्निहित तरीका यह करने के लिए है:
if sys.platform=='win32':
os.startfile(d)
यहाँ नहीं-बहुत-अच्छा वैकल्पिक समाधान खोल पाते हैं और इसके साथ एक फ़ोल्डर खोलने के लिए है है, जो आप अब आवश्यकता नहीं होनी चाहिए, लेकिन मैं में छोड़ देंगे। (आंशिक रूप से, क्योंकि यह कुछ और के लिए काम का हो सकता है, लेकिन ज्यादातर क्योंकि मैं समय शापित बात टाइप करने के लिए खर्च!)
if sys.platform=='win32':
import _winreg
path= r'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon')
for root in (_winreg.HKEY_CURRENT_USER, _winreg.HKEY_LOCAL_MACHINE):
try:
with _winreg.OpenKey(root, path) as k:
value, regtype= _winreg.QueryValueEx(k, 'Shell')
except WindowsError:
pass
else:
if regtype in (_winreg.REG_SZ, _winreg.REG_EXPAND_SZ):
shell= value
break
else:
shell= 'Explorer.exe'
subprocess.Popen([shell, d])
यह अंधेरे में एक पूर्ण स्टैब है, लेकिन wxPython पर एक नज़र डालें जो अंतर्निहित wxWidgets लाइब्रेरी को पाइथन बाइंडिंग प्रदान करता है। यह लंबे समय से रहा है क्योंकि मैंने इसे देखा था, लेकिन वहां कुछ ऐसा हो सकता है जिसका आप उपयोग कर सकते हैं। अन्यथा, यह अपने स्वयं के फ़ाइल ब्राउज़र बनाने के लिए अपेक्षाकृत आसान होना चाहिए जो प्रत्येक ओएस के लिए मूल "विजेट" का उपयोग करेगा।
आपको याद है, wxPython हल्का वजन नहीं है, यह वास्तव में आपके आवेदन को बढ़ाएगा और आपकी निर्भरताओं को बढ़ाएगा।
मैं अगर एक रेडी-टू-उपयोग मॉड्यूल मौजूद है पता नहीं है, लेकिन अगर वहाँ है, यह ActiveState के अजगर cookbok पर होना चाहिए (http://code.activestate.com/recipes/langs/python/)
इसके अलावा, कम से कम GNOME में और मैक ओएस पर, आप "gnome-open http://blah" निष्पादित कर सकते हैं और "http://blah खोलें" (मैक पर); दोनों उपयोगकर्ता के पसंदीदा ब्राउज़र में यूआरएल खोलेंगे।
लिनक्स के लिए freedesktop.org भी जांचें - जीनोम और केडीई दोनों को कवर करने वाले टूल का एक आम सेट, जिसमें कुछ समान शामिल होना चाहिए।
के बाद से " फ़ाइल ब्राउज़र "एक क्रॉस-प्लेटफ़ॉर्म सुविधा नहीं है, क्या - विशेष रूप से - क्या आप इसके बारे में बात कर रहे हैं? क्या आप किसी प्रकार की जीयूआई विंडो के बारे में बात कर रहे हैं जो "क्रॉस-प्लेटफार्म" है? आपने "क्रॉस-प्लेटफॉर्म" की परिभाषा को पूरा करने के लिए क्या GUI टूलकिट देखा है? –
@ एसएलॉट: एक पाइथन-प्रक्रिया स्वामित्व वाली जीयूआई विंडो नहीं - एक मूल उपप्रोसेसर को उसी अर्थ में खोलना जो 'वेबब्रोसर' करता है, जो उपयोगकर्ता के ऑपरेटिंग वातावरण के लिए उपयुक्त है। – cdleary