2016-06-21 13 views
0

Ich möchte ein Python-Skript schreiben, um die Konvertierung von libreoffice ott-Vorlagen in normale odt-Dateien zu automatisieren. wenn Ich gehe zu dem Terminal (bash) und I-Typ:Parameter "--outdir" wird nicht über pythons subprocess.call erkannt, funktioniert aber in Terminal

soffice --headless --convert-to odt "/path/template.ott" --outdir '/targetpath/template.odt' 

Der Ausgang wie erwartet ist, wird ein ODT-Datei in einer neuen Zielposition.

Wenn ich Skript es (wie so:

oldfile 
outdir = pipes.quote(/targetpath/template.odt) 
subprocess.call(['soffice --headless --convert-to odt /path/template.ott --outdir /pathtarget/template.odt']) 

der Ausgang gibt mir

[Errno 2] No such file or directory 

Wenn ich versuche, den Aufruf wie folgt zu machen:

subprocess.call(["soffice", "--headless", "--convert-to", "odt", pipes.quote(oldpath),outdir]) 

Das Ergebnis ist der Hilfetext von soffice, mit dem Grund:

LibreOffice 4.2.8.2 420m0(Build:2) 

    Unknown option: --outdir /targetpath/template.odt 
... 
+0

Haben Sie versucht, Shell = True zum Subprozessaufruf hinzuzufügen? – kezzos

+0

In der Tat, für die Übergabe des Befehls als eine Zeichenfolge, Hinzufügen von Shell = True ist eine Lösung! Danke vielmals. Es war tatsächlich eine bereits beantwortete Frage (http://stackoverflow.com/questions/18962785/oserror-errno-2-no-such-file-or-directory-while-using-python-subprocess-in-dj). Allerdings kann ich es immer noch nicht mit der Liste arbeiten. Wieder wurde dieser Fehler in http://stackoverflow.com/questions/15109665/subprocess-call-using-string-vs-using-list erwähnt. – Tom

Antwort

-1

Warum nicht mit os.system versuchen?

os.system('soffice --headless --convert-to odt "/path/template.ott" --outdir "/targetpath/template.odt"') 
+2

Da das Modul 'subprocess' ältere Funktionen wie 'os.system() 'ersetzen soll. – zondo

+0

in der Tat. os.system funktioniert, aber Subprozess sollte diese Funktion ersetzen. – Tom