2016-06-25 8 views
2

Ich versuche, einen R-Skript durch Python subprocess zu laufen, aber leider bin ich immer die folgende Fehlermeldung erhalten:Python - Mit subprocess zu Rohr R Script, resultierende WinError 2

WindowsError: [Error 2] The system cannot find the file specified 

Dies ist äußerst frustrierend, da ich den Pfad mehrfach über alles überprüft habe (ohne C: /, in andere Verzeichnisse verschoben, das R-Skript geändert, das ich ausführen möchte usw.). Ich habe auch die CompSec-Umgebungsvariable überprüft, und es ist auch korrekt (über Windows-Systeme, obwohl ich es nie direkt in meiner IDE, Spyder überprüfte). Ich habe versucht, es in Python 2.7 und Python 3.5 zu tun, und keine der beiden Versionen funktioniert.

Der Code lautet wie folgt:

import subprocess 

def sort_ByInputColumn(inputPath, inputFileTermination, sortColumn, outputPath, outputFileTermination): 
scriptPath = "C:/Users/Kyle/Documents/Rscript_SortByInputColumn.R" 
subprocess.call(["Rscript", scriptPath, inputPath, inputFileTermination, sortColumn, outputPath, outputFileTermination]) 

fileName = 'Alabama' 
outputPath = "C:/Users/Kyle/Documents/HillData/Data/Output/Module2/" 
sortColumn = str(16) 
inputTermination = fileName + 'Module2NN_WorkCounty_Work.csv' 
outputFileTermination = fileName + 'Module2NN_SortedWorkCounty.csv' 
sort_ByInputColumn(outputPath, inputTermination, sortColumn, outputPath, outputFileTermination) 

Die Tatsache, dass ich diesen Fehler bekommen, egal was Code, den ich versuche zu laufen (auch eklatant copy-Einfügen this tutorial zu versuchen und es funktioniert) macht mir das Gefühl, etwas tieferes (oder etwas extrem Offensichtliches) geht vor sich, das ich nicht sehe.

Ich würde mich über jede Rückmeldung zu diesem Thema freuen.

+0

Können Sie den Befehl in cmd ausführen? – Natecat

+0

Versuchen Sie, den vollständigen Pfad zur ausführbaren Datei anzugeben (unter der Annahme, dass _Rscript_ das Programm ist, das Sie ausführen möchten). – handle

+0

Präfix Ihren Skriptbefehl mit "cmd/c". Wenn es keine ausführbare Datei ist, wird das 'subprocess'-Modul es nicht für Sie ausführen (anders als' os.system') –

Antwort

2

dieses lästige und horrendes Problem zu lösen, ich neu installiert R in ein Verzeichnis ohne Leerzeichen und rief Rscript mit seiner vollen Wegfindung (dh "C:/R/R-3.3.1/bin/Rscript.exe" von C:/Program Files/R/R-3.3.1/bin/Rscript.exe" weil Program Files einen Raum hat und diese tötet subprocess weil es kommandozeilenbasiert ist, Ich vermute). Diesmal hat es funktioniert.

Einen Hinweis, wo ich die Inspiration dafür bekam, sehe ich in this similar question.