2010-02-17 122 views
-1

我試圖從Windows命令提示符運行程序。我有一些問題。代碼如下:Python,試圖從命令提示符運行程序

commandString = "'C:\Program Files\WebShot\webshotcmd.exe' //url '" + columns[3] + "' //out '"+columns[1]+"~"+columns[2]+".jpg'" 
os.system(commandString) 
time.sleep(10) 

於是用單引號我得到「文件名,目錄名或卷標語法不正確。」如果我用\「替換單引號」,那麼它說的是'C:\ Program'不是有效的可執行文件。「

我意識到這是一個語法錯誤,但我不太清楚解決這個問題....

列[3]包含從網絡瀏覽器粘貼完整的url複製(所以它應該是網址編碼)列[1]將只包含數字和句點。一些文字,雙引號和冒號更換。萬一一提...

謝謝!

+0

嘗試刪除單引號。 – ghostdog74 2010-02-17 16:46:35

+0

另外,閱讀所有這些答案:http://stackoverflow.com/search?q=%5Bpython%5D+subprocess+windows。你的問題是重複的。例如,這可能有所幫助:http://stackoverflow.com/questions/221097/what-is-the-best-way-on-python-2-3-for-windows-to-execute-a-program-like -ghostscr – 2010-02-17 18:26:17

回答

1

使用subprocess模塊調用系統命令。一另外,請嘗試刪除單引號並使用雙引號。

1
  • 在這種情況下,Windows需要雙引號,並且您使用了單引號。
  • 使用subprocess模塊而不是os.system,這是更健壯,避免直接調用shell,使您不必擔心混淆轉義問題。
  • 不要使用+將長字符串放在一起。使用字符串格式(string %s" % (formatting,)),它更具可讀性,效率和習慣。
  • 在這種情況下,無論如何都不要將長字符串作爲shell命令,製作一個列表並將它傳遞給subprocess.call
  • 盡我所能地告訴你,你正在逃避你的正斜槓,但不是你的反斜槓,這是倒退。帶有//的字符串文字在其製作的字符串中都有斜槓。在任何情況下,您都不應該使用os.path模塊,這樣可以避免解析轉義時產生的混淆,並且通常使腳本更具可移植性。