2013-10-30 8 views
6

से लेटेक्स संकलित करें मैंने लेटेक्स का उपयोग करके पीडीएफ फ़ाइल के रूप में पास स्ट्रिंग को संकलित करने के लिए कुछ पायथन फ़ंक्शन बनाया है। समारोह अपेक्षित काम करता है और काफी उपयोगी रहा है, इसलिए मैं इसे सुधारने के तरीकों की तलाश करता हूं।पाइथन

कोड है जो मेरे पास है:

def generate_pdf(pdfname,table): 
    """ 
    Generates the pdf from string 
    """ 
    import subprocess 
    import os 

    f = open('cover.tex','w') 
    tex = standalone_latex(table) 
    f.write(tex) 
    f.close() 

    proc=subprocess.Popen(['pdflatex','cover.tex']) 
    subprocess.Popen(['pdflatex',tex]) 
    proc.communicate() 
    os.unlink('cover.tex') 
    os.unlink('cover.log') 
    os.unlink('cover.aux') 
    os.rename('cover.pdf',pdfname) 

कोड के साथ समस्या यह है कि यह काम कर रहा निर्देशिका जो बाद में हटा दिया जाता है में कवर नामित फ़ाइलों की गुच्छा बनाता है।

कार्यशील निर्देशिका में अनइडेड फ़ाइलों को बनाने से कैसे बचें?

समाधान

def generate_pdf(pdfname,tex): 
""" 
Genertates the pdf from string 
""" 
import subprocess 
import os 
import tempfile 
import shutil 

current = os.getcwd() 
temp = tempfile.mkdtemp() 
os.chdir(temp) 

f = open('cover.tex','w') 
f.write(tex) 
f.close() 

proc=subprocess.Popen(['pdflatex','cover.tex']) 
subprocess.Popen(['pdflatex',tex]) 
proc.communicate() 

os.rename('cover.pdf',pdfname) 
shutil.copy(pdfname,current) 
shutil.rmtree(temp) 
+0

आप अपने पीडीएफ को आपके द्वारा बनाए गए फ्लेडर में बना सकते हैं, पीडीएफ को एक बार पूरा कर लेते हैं और फ़ोल्डर को रिकर्सिवली से हटा देते हैं। – Theolodis

+1

ये फ़ाइलें अनियंत्रित नहीं हैं, उनका उपयोग 'लेटेक्स'' द्वारा किया जाता है। आप उन्हें नहीं बना सकते हैं, आप केवल बाद में उन्हें हटा सकते हैं (या वर्तमान निर्देशिका के साथ प्रक्रिया को 'tempfile.mkdtemp()' ''पर इंगित करें)। – fjarri

+0

उन फ़ाइलों को 'लाटेक्स' के संचालन के लिए आवश्यक है। देखें [यह प्रश्न] (http://tex.stackexchange.com/questions/11123/prevent-pdflatex-from-writing-a-bunch-of-files) TEX.SX – darthbith

उत्तर

8

एक अस्थायी निर्देशिका का प्रयोग करें। अस्थायी निर्देशिका हमेशा लिखने योग्य होती है और इसे पुनरारंभ करने के बाद ऑपरेटिंग सिस्टम द्वारा साफ़ किया जा सकता है। tempfile लाइब्रेरी आपको एक सुरक्षित तरीके से अस्थायी फ़ाइलें और निर्देशिका बनाने देता है।

path_to_temporary_directory = tempfile.mkdtemp() 
# work on the temporary directory 
# ... 
# move the necessary files to the destination 
shutil.move(source, destination) 
# delete the temporary directory (recommended) 
shutil.rmtree(path_to_temporary_directory) 
+0

एक अच्छी शुरुआत लगता है। गंतव्य पर कैसे चल रहा है? –

+0

'शिलिल लाइब्रेरी' पर एक नज़र डालें। मैंने उत्तर में प्रासंगिक कॉल शामिल की हैं। –