2016-01-02 69 views
0

試圖使用下面的代碼(在applescript中工作正常)在Python中工作,對於Python來說是相當新的,所以我不知道如何讓這個字符串正常工作。使用額外引號的Python osascript

def getChromeSource(): 
    cmdGetSource = """ 
    osascript -e 'tell application "Google Chrome" to set source to execute front window's active tab javascript "document.documentElement.outerHTML"' 
    """ 
    proc = subprocess.Popen([cmdGetSource], stdout=subprocess.PIPE, shell=True) 
    (source, err) = proc.communicate() 

我相信這個問題是

window's 

我曾嘗試:

window\s 

但是,這並不工作,我想我只是有太多的引號和我不知道如何正確書寫字符串,可能是一個非常簡單的字符串,所以希望有人能夠引導我走向正確的方向。

+1

爲什麼不把它作爲一個列表傳遞? –

+0

您能向我展示一個例子嗎? – bengerman

回答

0

您應該傳遞想要執行的參數列表,而不是創建一個包含所有參數的字符串。您也不應該使用shell=true標誌。

cmd_args = ['osascript', '-e', 'tell application "Google Chrome" to set source to execute front window\'s active tab javascript "document.documentElement.outerHTML"'] 
proc = subprocess.Popen(cmd_args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
source, err = proc.communicate() 
+0

很好,謝謝你的幫助。 shell = true是做什麼的?我一直在使用這個OSA腳本來進行各種用途。 – bengerman

+0

@bengerman在終端中輸入命令時,會有一個「shell程序」處理諸如管道,I/O重定向,「〜」擴展等操作,然後調用OS來運行該命令。既然你沒有使用任何這些功能,你不需要'shell = true';此外,它可能是一個安全風險,所以如果你不需要,最好不要使用它。欲瞭解更多信息,請參閱[模塊文檔](https://docs.python.org/2/library/subprocess.html#frequently-used-arguments)和[此SO問題](http://stackoverflow.com/questions/3172470 /實際意義的的殼真合子)。 – augurar