2017-07-15 3 views
0

Ich verwende conda, um eine Python 2.7-Umgebung einschließlich der R package zu erstellen. Wenn ich eine Python-Session in einer Konsole zu öffnen, kann ich überprüfen, ob R in der Tat mit dem Popen Konstruktor installiert ist:Popen Subprozess funktioniert nicht in einem SublimeREPL?

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

wo die 0 bedeutet es installiert ist. Aber wenn ich die gleichen Befehle innerhalb einer Sublime Text 3 REPL unter der gleichen Python-Umgebung ausführen, bekomme ich eine 1.

Warum ist das und wie kann ich es beheben?

Antwort

1

Sie müssen kommunizieren:

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

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

wait nur für den Teilprozess wartet abgeschlossen und gibt Ihnen den Return-Code (die 0 ist, wenn seine erfolgreiche)

wenn Sie einen anderen Fehlercode erhalten (1 bedeutet, dass es fehlgeschlagen ist), ich würde versuchen, Ihre virtuelle Umgebung zu bestätigen. try sys.executable

+0

In einer Python-Sitzung '' proc.communicate() '' zurück: '('/ home/gabriel/anaconda3/envs/asteca27/bin/R \ n', '')'. In einer REPL gibt es '('', '')' zurück. Also denke ich, dass es "R", das in der "anaconda3" -Umgebung installiert ist, nicht von der REPL erkennt, auch nicht mit "communicate()". – Gabriel

+0

Es könnte sein, dass, wenn Sie es von Ihrem repl (was ist es, spyder, jupyter, sonst?), Dass es nicht auf stdout schreibt, sondern zurück zu was auch immer das repl ist, so dass es leer zurückkommt? Ich bin nicht sicher über diesen letzten Teil, um ehrlich zu sein. – Kelvin

+0

Ich benutze Sublime Text 3. Danke trotzdem, 'communicate()' ist nützlich. – Gabriel

Verwandte Themen