2016-08-04 34 views
0

Nach meiner previous question, die sich auf ein anderes Problem bezieht, dachte ich, ich würde in Bezug auf dieses Problem einrahmen.aufgerufen Subprozess führt Bash-Skript nicht in Folge

HINWEIS: Ich habe alle Versionen von subprocess.Popen() versucht, communicate(), wait(), wie zum Beispiel:

vowpal = subprocess.Popen('../../vowpal.sh',shell=True, stdout=subprocess.PIPE) 
vowpal.communicate() 
print vowpal.returncode 

ich eine Dateistruktur wie diese:

├── src 
│ ├── main 
│ │ ├── costSensitiveClassifier.py 
└── vowpal.sh 
| 
├── data 
│ ├── output 
│ │ ├── cost 
| | |_______openCostClassifier.dat 
| | | 

Und innerhalb costSensitiveClassifier.py, ich im Wesentlichen versuche ich, ein Skript mit dem Namen vowpal.sh, die einige Manipulationen an openCostClassifer.dat macht und ein paar Dateien in das gleiche ausführt Ordner als diese Datei.

Der Code innerhalb costSensitiveClassifier.py ist:

import subprocess 
print "Starting cost sensitive predictions using batch script\n" 
subprocess.call("../../vowpal.sh") 
print "Ending predictions" 

und der Code innerhalb vowpal.sh ist:

# !/bin/bash 
vw --csoaa 24 data/output/cost/openCostClassifier.dat -f data/output/cost/csoaa.model 
vw -t -i data/output/cost/csoaa.model data/output/cost/openCostClassifier.dat -p data/output/cost/csoaa.predict 

Die Frage ist immer, dass die zweite Zeile des Bash-Skript, es muss Sei etwas namens csoaa.model, das zuerst ausgegeben werden soll (siehe Zeile 1 des Bash-Skripts), und wenn der Vorgang abgeschlossen ist, sollte die zweite Zeile ausgeführt werden, die diese Datei verwendet, um csoaa.predict auszugeben. Dies ist jedoch nicht der Fall und ich erhalte, wenn die Python-Datei ausgeführt wird ich in meinem Fehlercode erhalte auf den Bash-Skript bezogen werden:

vw (./io_buf.h:123): can't open: data/output/cost/csoaa.modelerrno = No such file or directory 

Ich fand this link aber nicht sicher, ob es ist das, was ich brauche (soll ich anpassen der Schlaf als die erwartete Zeit für das bash Skript zu beenden und die Dateien zu erstellen, an denen ich arbeiten muss?).

+0

Es scheint, als ob Sie eine Workflow-Management-Bibliothek wie [Snakemake] (https://bitbucket.org/snakemake/snakemake/wiki/Home) oder [ruffus] (http://www.ruffus.org.uk) benötigen /) –

+0

Auch Ihr Fehler schlägt vor, dass Ihr Skript nach 'csoaa.modelerrno' nicht 'csoaa.model' sucht –

Antwort

1

Dies ist ein Problem in Vowpal. Es versucht, eine Fehlerdatei zu erstellen, was nicht möglich ist. Einer der Gründe könnte sein, dass das Verzeichnis "data/output/cost /" nicht existiert.

Das war, was den gleichen Fehler für mich verursacht hat.