2010-07-28 14 views
6

मैं पीडीएफ फ़ाइल के पहले पृष्ठ को जेपीईजी में रास्टराइज करने के लिए घोस्टस्क्रिप्ट का उपयोग कर रहा हूं। Tempfiles बनाने से बचने के लिए, पीडीएफ डेटा Ghoscripts के stdin में पाइप किया गया है और जेपीईजी stdout पर "सूखा" है। यह पाइपलाइन एक आकर्षण की तरह काम करती है जब तक कि जीएस को अमान्य पीडीएफ डेटा प्राप्त नहीं होता है: जैसा कि मैंने अपेक्षा की थी, stderr पर सभी त्रुटि संदेशों की रिपोर्ट करने के बजाय, यह अभी भी कुछ संदेशों को stdout पर लिखता है।Ghostscript को मानक आउटपुट में त्रुटियों को लिखने से रोकें

पुन: पेश करने के लिए:

$ echo "Not a PDF" >test.txt 
$ /usr/bin/gs -q -sDEVICE=jpeg -dBATCH -dNOPAUSE -dFirstPage=1 -dLastPage=1 \ 
    -r300 -sOutputFile=- - < test.txt 2>/dev/null 
Error: /undefined in Not 
Operand stack: 

Execution stack: 
... 

नोट 2>/dev/null ऊपर त्रुटि संदेश को दबाने नहीं है। घोस्टस्क्रिप्ट के दस्तावेज ने पहले से ही चेतावनी दी है कि stdout पर लिखने के लिए -q ध्वज को stdout पर संदेशों को दबाने के लिए आवश्यक है, लेकिन मुझे अभी भी कुछ याद आ रहा है।

उत्तर

11

आप वास्तव में चुप्पी Ghostscript चाहते हैं, इस तरह अपने आदेश पंक्ति को संशोधित:

/usr/bin/gs -q  \ 
    -sstdout=%stderr \ 
    -sDEVICE=jpeg \ 
    -dBATCH   \ 
    -dNOPAUSE  \ 
    -dLastPage=1  \ 
    -r300   \ 
    -sOutputFile=- \ 
    - < test.txt 2>/dev/null 

-sstdout=%stderr के अलावा पोस्टस्क्रिप्ट stdout, पुनः निर्देशित किया जबकि ड्राइवरों अभी भी इजाजत दी stdout में लिखने के लिए अनुमति देता है। (वह पैच ~ 2001, 22 सितंबर के बाद घोस्टस्क्रिप्ट में है।)

+2

धन्यवाद, पाइपिटस - यह वही है जो मैं ढूंढ रहा था। मुझे स्पष्ट रूप से '-sstdout =/dev/null' निर्दिष्ट करना था, हालांकि,'% sstderr' वर्तमान निर्देशिका में एक समान नाम वाली फ़ाइल बनाएगा। भविष्य के संदर्भ के लिए, यहां पैच पर चर्चा करने वाली मूल मेलिंग सूची धागा है: http://www.ghostscript.com/pipermail/gs-code-review/2001- मार्च/2000273.html –

+1

वहां पर एक टाइपो है। यह डबल s –

+0

Thx, @EdwardB के बिना '% stderr' होना चाहिए, आप सही हैं। मैंने ठीक कर दिया। –