2017-07-15 115 views
0

我使用conda來創建Python 2.7環境,包括R package。如果我在一個控制檯打開的Python會話,我可以檢查R確實與Popen構造安裝:Popen子過程在SublimeREPL中不起作用?

$ python 
>>> from subprocess import Popen, PIPE 
>>> proc = Popen(["which", "R"], stdout=PIPE, stderr=PIPE) 
>>> proc.wait() 
0 

其中0意味着它已安裝。但是,如果我在同一個Python環境下運行的Sublime Text 3 REPL中嘗試了相同的命令,則會得到一個1

這是爲什麼,我該如何解決?

回答

1

您需要溝通:

proc = Popen(['which', 'python'], stdout=PIPE) 
proc.communicate() 

('/Users/Kelvin/virtualenvs/foo/bin/python\n', None) 

wait只是等待子進程來完成,讓您的返回碼(即0,如果其成功)

如果你得到一個不同的錯誤代碼( 1意味着它失敗了),我會考慮確認你的虛擬環境。嘗試sys.executable

+0

在Python會話中'proc.communicate()'返回:'('/ home/gabriel/anaconda3/envs/asteca27/bin/R \ n','')'。在REPL中它返回'('','')'。所以我猜測它沒有檢測到REPL在anaconda3環境中安裝了'R',即使使用'communic()'也是如此。 – Gabriel

+0

如果你從你的repl(這是它,spyder,jupyter,別的嗎?)這樣做,它不是寫入標準輸出,而是回到repl是什麼,所以它回到空白?我不確定最後一部分是否誠實。 – Kelvin

+0

我正在使用Sublime Text 3.無論如何,'communicate()'是有用的。 – Gabriel