2012-08-07 113 views
9

我試圖創建一個程序來掃描文本文件並將參數傳遞給子進程。一切工作正常,直到我得到路徑中的空間目錄。用空格處理目錄Python subprocess.call()

我的拆分方法,它打破了爭論,空間旅行了起來:

s = "svn move folder/hello\ world anotherfolder/hello\ world" 

task = s.split(" ") 
process = subprocess.check_call(task, shell = False) 

做什麼,無論是我需要的功能來解析正確的參數,或者我的整個字符串傳遞到子進程而不被破壞。先下。

雖然我有點迷路。

+0

你可以依靠固定數量的空格分隔的左令牌? – 2012-08-07 12:42:05

+1

如何引用文件名? – 2012-08-07 12:45:54

+1

如果您創建了正在讀取的文件名,爲什麼不使用值逗號分隔?然後拆分「,」而不是所有的麻煩? – 2012-08-07 12:47:07

回答

12

使用列表來代替:

task = ["svn", "move", "folder/hello world anotherfolder/hello world"] 
subprocess.check_call(task) 

如果文件包含整個命令,不只是路徑,那麼你可以嘗試shlex.split()

task = shlex.split(s) 
subprocess.check_call(task) 
+3

+1 [shlex](http://docs.python.org/library/shlex)。 – RanRag 2012-08-07 12:48:12

+0

謝謝你謝謝你!使用列表可以解決各種奇怪的引用/轉義問題+1 – Brian 2017-02-11 20:17:30