2011-02-02 8 views
6

का उपयोग कर फ़ाइल खोलने में विफलता मैं कुछ पाइथन स्क्रिप्ट कोडिंग कर रहा हूं जो कुछ ऑपरेशन करने के लिए एप्लिकेशन pdftk का उपयोग कर रहा है।पायथन: os.system()

उदाहरण के लिए, मैं pdftk खिड़कियों कमांड लाइन खोल में इस तरह दो पीडीएफ फाइलों विलय करने के लिए उपयोग कर सकते हैं:

pdftk 1.pdf 2.pdf cat output result.pdf 

मैं अपने अजगर स्क्रिप्ट के बीच में ऊपर कार्रवाई करने के लिए करना चाहते हैं। यहां बताया गया है कि मैंने इसे करने का प्रयास कैसे किया:

os.system('pdftk 1.pdf 2.pdf cat output result.pdf') 

उपरोक्त pdftk कमांड विंडोज शैल में पूरी तरह से काम करता है। हालांकि, जब मैं पाइथन के os.system() का उपयोग करके इसे निष्पादित करने का प्रयास कर रहा हूं, तो इनपुट इनपुट (1.pdf और 2.pdf) खोलने में विफल रहता है।

Error: Failed to open PDF file: 1.pdf

Error: Failed to open PDF file: 2.pdf

यह क्यों होता है: यहाँ त्रुटि संदेश मैं pdftk से मिलता है जब आदेश का उपयोग कर पायथन के os.system() निष्पादित करने के लिए कोशिश कर रहा है? मेरे द्वारा यह कैसे किया जा सकता है?

कृपया ध्यान दें: मुझे पता है कि पीडीएफ फाइलों को पाइथन के साथ मर्ज करने के बेहतर तरीके हैं। मेरा सवाल पीडीएफ फाइलों को विलय करने के बारे में नहीं है। वह सिर्फ एक खिलौना उदाहरण था। जो मैं प्राप्त करने की कोशिश कर रहा हूं वह पाइथन का उपयोग करके पीडीएफटीके और अन्य कमांड लाइन अनुप्रयोगों को निष्पादित करने की क्षमता है।

+4

यह निश्चित रूप से निर्देशिका पथ के साथ एक मुद्दा है। आप 'सी: \' या जहां भी हो, से पूर्ण पथ में जा सकते हैं, या सुनिश्चित कर सकते हैं कि आप सही निर्देशिका में शुरू कर रहे हैं। – chmullig

+0

यह एक उद्धरण या खोल परिवर्तनीय इंटरपोलेशन मुद्दा भी हो सकता है। ऐसे मुद्दों से बचने के लिए हमेशा 'os.system' के बजाय 'subprocess' मॉड्यूल का उपयोग करें। – Philipp

+3

@chmullig: क्या आप वास्तव में बात करते हैं कि मैं बेवकूफ हूँ? खैर, मैं बाहर हूँ। समस्या वास्तव में एक पथ मुद्दा था। प्रश्न के उत्तर में आपने जो कहा है उसे दोहराएं और मैं इसे स्वीकार करूंगा। धन्यवाद। – snakile

उत्तर

3

आप (संभावित) के हवाले से बचने, और इतने पर, subprocess साथ साथ समस्याओं से बचने कर सकते हैं:

import subprocess 

subprocess.call(['pdftk', '1.pdf', '2.pdf', 'cat', 'output', 'result.pdf']) 

यह रूप में उपयोग करने के लिए बस के रूप में आसान है os.system, और यदि आप तर्क सूची को गतिशील रूप से बना रहे हैं तो भी आसान है।

2

आपको प्रक्रिया की वर्तमान कार्यशील निर्देशिका सेट करने की आवश्यकता है। .pdf फ़ाइल /some/path/to/pdf/files/ पर हैं, तब:

>>> os.getcwd() 
'/home/vz0' 
>>> os.chdir('/some/path/to/pdf/files/') 
संबंधित मुद्दे