Systemaufruf mit Ghostscript
Verfasst: Donnerstag 26. März 2009, 21:42
Hallo,
ich bin noch ein Python-Rookie, vielleicht ist die Antwort trivial. Für verschiedene Anwendungen benötige ich Systemaufrufe, deren Ausgaben ich auch wieder einlese. Alle möglichen Varianten funktionieren gut, die folgende jedoch nicht. Ich möchte mit ghostscript die Anzahl der Seiten in einem PDF bestimmen. An der Shell oder mit Perl funktioniert der Aufruf perfekt. Über den os.popen-Aufruf (os.system auch) wird ghostscript interaktiv gestartet, d.h. die Kommandozeilenargumente kommen nicht richtig an (vermute ich). Ist irgendetwas an os.popen speziell??? Wie gesagt, das gleiche in Perl funktioniert tadellos.
Hier ist der Code:
import os
file = open("c:/temp/pdfpagecount.ps","w")
print >> file, """
% pdfpagecount.ps
% read pdf file and output number of pages
% based on pdf2dsc.ps with one line taken from ps2ascii.ps
/PDFfile PDFname (r) file def
/PageCountString 255 string def
systemdict /.setsafe known { .setsafe } if
/.show.stdout { (%stdout) (w) file } bind def
/puts { .show.stdout exch writestring } bind def
GS_PDF_ProcSet begin
pdfdict begin
PDFfile
pdfopen begin
/FirstPage where { pop } { /FirstPage 1 def } ifelse
/LastPage where { pop } { /LastPage pdfpagecount def } ifelse
(%%Pages: ) puts
LastPage FirstPage sub 1 add PageCountString cvs puts
quit
"""
result = os.popen("c:/programme/gs/gs8.64/bin/gswin32c.exe -q "
+"-sPDFname=c:/temp/a_pdf_file.pdf c:/temp/pdfpagecount.ps").read()
print result
ich bin noch ein Python-Rookie, vielleicht ist die Antwort trivial. Für verschiedene Anwendungen benötige ich Systemaufrufe, deren Ausgaben ich auch wieder einlese. Alle möglichen Varianten funktionieren gut, die folgende jedoch nicht. Ich möchte mit ghostscript die Anzahl der Seiten in einem PDF bestimmen. An der Shell oder mit Perl funktioniert der Aufruf perfekt. Über den os.popen-Aufruf (os.system auch) wird ghostscript interaktiv gestartet, d.h. die Kommandozeilenargumente kommen nicht richtig an (vermute ich). Ist irgendetwas an os.popen speziell??? Wie gesagt, das gleiche in Perl funktioniert tadellos.
Hier ist der Code:
import os
file = open("c:/temp/pdfpagecount.ps","w")
print >> file, """
% pdfpagecount.ps
% read pdf file and output number of pages
% based on pdf2dsc.ps with one line taken from ps2ascii.ps
/PDFfile PDFname (r) file def
/PageCountString 255 string def
systemdict /.setsafe known { .setsafe } if
/.show.stdout { (%stdout) (w) file } bind def
/puts { .show.stdout exch writestring } bind def
GS_PDF_ProcSet begin
pdfdict begin
PDFfile
pdfopen begin
/FirstPage where { pop } { /FirstPage 1 def } ifelse
/LastPage where { pop } { /LastPage pdfpagecount def } ifelse
(%%Pages: ) puts
LastPage FirstPage sub 1 add PageCountString cvs puts
quit
"""
result = os.popen("c:/programme/gs/gs8.64/bin/gswin32c.exe -q "
+"-sPDFname=c:/temp/a_pdf_file.pdf c:/temp/pdfpagecount.ps").read()
print result