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?).
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 /) –
Auch Ihr Fehler schlägt vor, dass Ihr Skript nach 'csoaa.modelerrno' nicht 'csoaa.model' sucht –