2016-06-21 27 views
0

我想編寫一個python腳本來自動將libreoffice ott模板轉換爲正常的odt文件。 如果我去到終端(bash外殼)和I型:參數「--outdir」不能通過pythons subprocess.call識別,但在終端工作

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

的輸出是如預期的,在一個新的目標位置的ODT文件。

當我腳本它(就像這樣:

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

輸出給了我

[Errno 2] No such file or directory 

當我嘗試做這樣的呼籲:

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

結果soffice的幫助文字,其原因如下:

LibreOffice 4.2.8.2 420m0(Build:2) 

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

您是否嘗試將shell = True添加到子流程調用? – kezzos

+0

的確,爲了將命令作爲一個字符串傳遞,添加shell = True是一個解決方案!非常感謝。這確實是一個已解決的問題(http://stackoverflow.com/questions/18962785/oserror-errno-2-no-such-file-or-directory-while-using-python-subprocess-in-dj)。但是,我仍然無法使它與列表一起工作,再次,確實在http://stackoverflow.com/questions/15109665/subprocess-call-using-string-vs-using-list中提到了該錯誤。 – Tom

回答

-1

爲什麼不嘗試使用os.system?

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

因爲'subprocess'模塊是爲了替代舊的函數,例如'os.system()'。確實是 – zondo

+0

。 os.system確實有效,但子進程應該替換該函數。 – Tom

相關問題