2016-08-23 162 views
2

我在目錄/Desktop/jsons中有一組json文件,並且我有一個接受json並輸出內容的Scala腳本。我可以通過手動cd在終端運行它荷蘭國際集團研究Scala腳本(/Me/dev/scalastuff)的目錄,並運行通過python腳本在命令行中執行sbt並輸出到文件

sbt --error "run /Desktop/jsons/jsonExample.json"

其輸出我想在終端中的東西。

我想寫一個Python腳本,它會自動執行此操作,並輸出一個帶有由Scala腳本輸出的「stuff」的json文件。

我現在的問題是使用子處理。當我嘗試運行

BASEDIR = '/Me/dev/scalastuff' p = subprocess.Popen(['sbt --error "run /Desktop/jsons/jsonExample.json"'], cwd = BASEDIR, stdout = subprocess.PIPE) out = p.stdout.read() print out

我得到OSError: [Errno 2] No such file or directory

我完全難以理解爲什麼會發生這種情況。我是新來的子流程,所以請點亮我!

回答

3

popen python獲取shell參數列表。你只傳遞一個!

因此它試圖執行一個名爲全'sbt --error "run /Me/Desktop/jsons/jsonExample.json"'的文件。

很明顯,這是行不通的。

如果您使用popen;只需通過一個簡單的陣列 - 你不必在意轉義:

subprocess.popen(['sbt', '--error', 'run /Me/Desktop/...'], cwd = BASEDIR, stdout = subprocess.PIPE) 
+1

啊!那肯定是我錯過的。非常感謝 - 一旦時間過去,我會將問題標記爲答案。 – boldbrandywine