2012-07-12 57 views
1

我想記錄所有調用subprocess.Popen,以便我可以創建一個等效的批處理/ shell文件。日誌記錄subprocess.Popen調用

python如何將參數列表轉換爲命令?

是否相當於' '.join([args])

例如:

args=['ls', '-A'] 
subprocess.Popen(args) 
# ... 

我希望得到同等文件,所有的呼叫:

ls -A 

回答

1

不,這並不等於說(因爲某些觀點可能有空間或其中的其他shell元字符)。實際上,除非使用shell = True,否則Python不需要將所有參數合併爲一個字符串。它使用類似exec *()的調用(請參閱man execve)並將參數傳遞給數組。

如果您只是想輸出足夠的信息以便稍後重新創建參數列表,那麼您可能只想輸出repr(args)

由於您的目標是製作等效的批處理/ shell文件,因此您可能需要採取特殊的步驟來引用參數,以便它們內部的任何特殊元字符不會影響shell如何分割參數。一種方法是通過像我在https://gist.github.com/790722上提供的函數來傳遞每個參數(儘管它不知道如何爲批處理文件進行安全引用)。

+0

原來,一個批處理文件是不相同的(甚至不支持'../ blah.exe'相對路徑類型命令)。雖然你肯定在這裏回答了我的問題。 :) – Darthfett 2012-07-12 20:00:52

+0

是的,批處理語法糟透了:) – 2012-07-12 20:40:14