2011-12-07 76 views
3

我在這裏有一個簡單的批處理文件,它將從命令行打印一個word文檔。打印一個詞Python中的文檔

"C:\Program Files\Microsoft Office\Office12\winword.exe" "p:\docs\daily checks.doc" /mFilePrintDefault /mFileExit 

我試圖把這個變成一個python腳本,我已成功地獲得文檔使用

subprocess.Popen('"C:\\Program Files\Microsoft Office\Office12\winword.exe"' '"P:\\docs\\daily checks.doc "') 

打開我似乎不能在命令獲取/mFilePrintDefault /mFileExit部分,我已經嘗試使用+'"/mFilePrintDefault /mFileExit"' plus,但沒有+,但是文檔無法打開。

你能可能幫助看我怎麼可以打印這個詞的文件,或者有更好的辦法提前

感謝

回答

8

這應該工作:

subprocess.Popen(["C:\\Program Files\Microsoft Office\Office12\winword.exe", "P:\\docs\\daily checks.doc", "/mFilePrintDefault", "/mFileExit"]).communicate() 

或者altenatively,

subprocess.Popen("'C:\\Program Files\Microsoft Office\Office12\winword.exe' 'P:\\docs\\daily checks.doc' /mFilePrintDefault /mFileExit", shell=True).communicate() 

當您使用shell=True命令通過shell中執行。這意味着您必須以與在shell中寫入命令相同的方式傳遞單個字符串,也就是說,使用引號來防止將空格分隔的參數。

當您使用shell=False(默認值)時,該命令不會通過shell執行。這意味着你必須自己拆分參數。你這樣做的方式是傳遞一個包含所有參數的列表。在這種情況下,不需要額外的引用,因爲列表元素已經提供了這些信息。

+0

好的解釋! +1 – mac

+0

完美的工作,非常感謝您的快速反應和幫助。發現! – geekcomputers

0

嘗試使用以下:

subprocess.Popen('"C:\\Program Files\Microsoft Office\Office12\winword.exe" m"P:\\docs\\daily checks.doc" /mFilePrintDefault /mFileExit') 

Popen預計一完整的字符串或參數列表,基本上輸入你要在shell中輸入的內容到Popen,它會工作。

documentation on Popen狀態:

ARGS應該是一個字符串,或者程序參數的順序。