2013-02-24 30 views
7

मैं सोच रहा हूं कि फ़ाइल के एक्सटेंशन के आधार पर नोटपैड और पिक्चर व्यूअर जैसे प्रोग्रामों में फ़ाइलों को कैसे खोलें। मैं विंडोज पर पायथन 3.3 का उपयोग कर रहा हूँ।मैं पाइथन में बाहरी कार्यक्रमों में फ़ाइलों को कैसे खोल सकता हूं?

मैंने कुछ शोध किया है और लोगों ने Image नामक एक मॉड्यूल का उल्लेख किया है, लेकिन जब मैं इस मॉड्यूल को आजमाता हूं और आयात करता हूं तो मुझे एक आयात त्रुटि मिलती है।

यहाँ मैं अब तक है:

def openFile(): 
    fileName = listbox_1.get(ACTIVE) 
    if fileName.endswith(".jpg"): 
     fileName.open() 

मैं भी एचटीएमएल और JSON फ़ाइलें है कि मैं नोटपैड में खोलने की आवश्यकता होगी होगा। इस डिफ़ॉल्ट प्रोग्राम के साथ किसी भी फ़ाइल को खोलने का

+0

आपको शायद यह उल्लेख करना चाहिए कि आप किस प्लेटफॉर्म का उपयोग कर रहे हैं। – FatalError

+0

धन्यवाद इंटरजे, उस प्रश्न का उत्तर मैं –

उत्तर

5

उपयोग:

import os 
def openFile(): 
    fileName = listbox_1.get(ACTIVE) 
    os.system("start " + fileName) 

तुम सच में एक निश्चित कार्यक्रम का उपयोग करना चाहते हैं, इस तरह के नोटपैड के रूप में, आप इसे इस तरह से कर सकते हैं:

import os 
def openFile(): 
    fileName = listbox_1.get(ACTIVE) 
    os.system("notepad.exe " + fileName) 

अगर फ़ाइल खोलने से पहले जांच की जाती है तो आपको कुछ चाहिए, तो उन्हें जोड़ने में संकोच न करें। यह केवल आपको दिखाता है कि फ़ाइल को कैसे खोलें।

+0

'os.system()' कॉलिंग थ्रेड को अवरुद्ध कर सकता हूं। 'सबप्रोसेस' मॉड्यूल में से कुछ अधिक उपयुक्त हो सकता है। – FatalError

+0

मुझे प्रोग्राम नाम जोड़ने में पतली बीमार आवश्यकता है क्योंकि जेसन जैसी फाइलें खोलने के लिए एक विशिष्ट प्रोग्राम नहीं है, जिससे –

+0

@ LWH91 मैं फ़ाइल को '.json' के साथ समाप्त होने पर चेक जोड़ने की सलाह दूंगा, अगर यह करता है, एक कस्टम प्रोग्राम के साथ फ़ाइल खोलें। अन्यथा "शुरू करें" का उपयोग करें। –

4

उदाहरण के साथ फातालरर के सुझाव पर विस्तार।

एक os.system बजाय subprocessing का उपयोग कर का अतिरिक्त लाभ है, यह एक ही वाक्य रचना पार मंच (os.system विंडोज पर एक शुरुआत में "शुरू" की आवश्यकता है का उपयोग करता है, जबकि ओएस एक्स और "खुला"। नहीं एक बड़ा सौदा की आवश्यकता है लेकिन याद रखने के लिए एक कम चीज़)।

subprocess.call के साथ एक फ़ाइल खोलना।

किसी प्रोग्राम को लॉन्च करने के लिए आपको केवल subprocess.call() पर कॉल करना है और list में लॉस में तर्क है जहां पहला प्रोग्राम प्रोग्राम है, और बाकी अतिरिक्त तर्क हैं जिन्हें आप उस प्रोग्राम को आपूर्ति करना चाहते हैं जिसे आप आपूर्ति करना चाहते हैं शुभारंभ।

उदाहरण के लिए, शुरू करने के लिए Notepad.exe

import subprocess 
import os 


path_to_notepad = 'C:\\Windows\\System32\\notepad.exe' 
path_to_file = 'C:\\Users\\Desktop\\hello.txt' 

subprocess.call([path_to_notepad, path_to_file]) 

कई तर्कों और रास्तों पासिंग समान रूप से के रूप में सरल है। बस सूची में अतिरिक्त आइटम जोड़ें।


कई तर्क

इस के साथ शुभारंभ, उदाहरण के लिए, जावा क्रम पर्यावरण की एक विशिष्ट प्रति का उपयोग कर एक जार फ़ाइल की शुरूआत।

import subprocess 
import os 

current_path = os.getcwd() 
subprocess.call([current_path + '/contents/home/bin/java', # Param 1 
        '-jar', #Param2 
        current_path + '/Whoo.jar']) #param3 

तर्क 1 उस प्रोग्राम को लक्षित करता है जिसे मैं लॉन्च करना चाहता हूं। Argument2 एक तर्क से प्रदान करता है कि प्रोग्राम यह कहता है कि यह एक जेएआर चलाने जा रहा है, और आखिरकार Argument3 लक्ष्य प्रोग्राम को कहता है कि फ़ाइल को खोलने के लिए कहां खोजें।

14

विंडोज पर आप डिफ़ॉल्ट अनुप्रयोग का उपयोग कर फ़ाइल को खोलने का os.startfile() इस्तेमाल कर सकते हैं:

import os 
os.startfile(filename) 

कोई shutil.open() कि यह पार मंच करना होगा नहीं है।नज़दीकी अनुमान webbrowser.open() है:

import webbrowser 
webbrowser.open(filename) 

ओएस एक्स, os.startfile() विंडोज पर, xdg-open या लिनक्स पर समान पर स्वचालित रूप से open आदेश का उपयोग हो सकता है कि।

आप एक विशिष्ट अनुप्रयोग चलाना चाहते हैं तो आप इस्तेमाल कर सकते हैं subprocess module जैसे, Popen() इसके पूर्ण होने की प्रतीक्षा किए बिना एक कार्यक्रम शुरू करने की अनुमति देता है:

import subprocess 

p = subprocess.Popen(["notepad.exe", fileName]) 
# ... do other things while notepad is running 
returncode = p.wait() # wait for notepad to exit 

वहाँ चलाने के लिए subprocess मॉड्यूल का उपयोग करने के कई तरीके हैं प्रोग्राम्स उदाहरण के लिए, आदेश subprocess.check_call(command) ब्लॉक तब तक समाप्त होता है जब कमांड समाप्त हो जाता है और एक अपवाद उठाता है यदि कमांड गैर-निकास निकास कोड के साथ समाप्त होता है।

+0

केवल समस्या यह है कि जेसन फाइलों में एक डिफ़ॉल्ट अनुप्रयोग नहीं है, इसलिए बॉक्स उपयोगकर्ता को यह पूछने के लिए कहेंगे कि –

+0

@ LWH91 में इसे कौन सा प्रोग्राम खोलना है: मैंने प्रोग्राम को स्पष्ट रूप से चलाने के लिए उपप्रोसेस-आधारित समाधान जोड़ा है। – jfs