Seite 1 von 2

SyntaxError: invalid syntax

Verfasst: Mittwoch 3. April 2019, 09:21
von helloworld
Hallo,

leider bekomme ich eine Fehlermeldung:

File "scripts/train_model.py", line 3
DATASET=${1:"-dna"}
^
SyntaxError: invalid syntax

Folgendes Skript (python 2.7.8)
#!/bin/bash -x

DATASET=${1:"-dna"}
N_ITER=50000
RUN_DIR="saved_models/${DATASET}"
PATH_DATASET_ALL_CSV="data/csvs/${DATASET}.csv"
PATH_DATASET_TRAIN_CSV="data/csvs/${DATASET}/train.csv"
GPU_IDS=${2:-0}
Hat jemand eine IDee? Ich bin Anfaenger und langsam sehr verzweifelt....

Re: SyntaxError: invalid syntax

Verfasst: Mittwoch 3. April 2019, 09:33
von __deets__
Das ist kein Python. Das ist Shell Skript.

Re: SyntaxError: invalid syntax

Verfasst: Mittwoch 3. April 2019, 15:32
von helloworld
Danke! Aber laesst sich der Fehler trotzdem erklaren?

Re: SyntaxError: invalid syntax

Verfasst: Mittwoch 3. April 2019, 15:40
von sparrow
Ja. Man kann ein Shellscript nicht mit dem Python-Interpreter ausführen.

Re: SyntaxError: invalid syntax

Verfasst: Mittwoch 3. April 2019, 17:13
von helloworld
Und wie kann man das aendern? ich hatte das script so gestartet:
sudo chmod u+x ./dateiname/.sh
sudo ./dateiname/sh
ist es dann nicht als Shellscript ausgefuehrt? Ich bin leider sehr am Anfang...

Re: SyntaxError: invalid syntax

Verfasst: Mittwoch 3. April 2019, 17:16
von __deets__
Wieso denn sudo? Das ist kein magisches "mache es alles richtig"-Kommando. Und so wie du es da oben hingeschrieben hast, sind die Namen auch unterschiedlich. Dann muss das natuerlich fehlschlagen.

Re: SyntaxError: invalid syntax

Verfasst: Mittwoch 3. April 2019, 17:27
von helloworld
auch ohne sudo geht es nicht. Die Namen sind nur unterschiedlich, weil eben vertippt. das oben genannte soll nur das vorgehen verdeutlichen.
Es ist aber prinzipiel so, dass wenn man ein .sh script startet, dass es dann als Shellscript ausgefuehrt wird? Mir ist nicht ganz klar, wie es haette passieren koennen, dass das Shellscript als Python Interpreter haette ausgefuehrt werden koennen.

Kann der Fehler nicht auch woanders liegen oder ist es sehr wahrscheinlich, dass es an Python/ Shell liegt?

Re: SyntaxError: invalid syntax

Verfasst: Mittwoch 3. April 2019, 17:40
von Sirius3
@helloworld: also der Fehler tritt in der Datei scripts/train_model.py auf, also nicht in dateiname.sh wie meinst.
Das gezeigte Shell-Skript sieht auch nicht vollständig aus, denn das macht außer ein paar Variablen anlegen, nichts.

Re: SyntaxError: invalid syntax

Verfasst: Mittwoch 3. April 2019, 17:42
von __deets__
Der Fehler den du gepostet hast, der liegt daran das Python eben nicht Shell ist, und du ein Shell-Skript nicht mit Python ausgefuehrt bekommst.

Zu halbeherzig aus dem Gedaechtnis getippten Dingen ohne Fehlermeldung kann man nichts sagen. Da musst du dann schon konkrete Ausgaben und Fehlermeldungen zeigen, die aufgetreten sind, als du das OHNE Python ausgefuehrt hast.

Und zu guter Letzt zum sudo: das einfach so rumzusprenkeln weil man denkt es wuerde irgendwie helfen, kann drastische Folgen haben. Wie zb eine geloeschte Festplatte oder ein sonstwie zerstoertes System.

Re: SyntaxError: invalid syntax

Verfasst: Mittwoch 3. April 2019, 18:16
von helloworld
Vielen Dank!

Das hier ist das vollstaendige Skript:

#!/bin/bash -x



DATASET=${1:-dna}

N_ITER=50000

RUN_DIR="saved_models/${DATASET}"

PATH_DATASET_ALL_CSV="data/csvs/${DATASET}.csv"

PATH_DATASET_TRAIN_CSV="data/csvs/${DATASET}/train.csv"

GPU_IDS=${2:-0}



DATASET_KWARGS="{\

\"transform_signal\": [\"fnet.transforms.Normalize()\", \"fnet.transforms.Resizer((1, 0.37241, 0.37241))\"], \

\"transform_target\": [\"fnet.transforms.Normalize()\", \"fnet.transforms.Resizer((1, 0.37241, 0.37241))\"] \

}"

BPDS_KWARGS="{\

\"buffer_size\": 1 \

}"



cd $(cd "$(dirname ${BASH_SOURCE})" && pwd)/..



python scripts/python/split_dataset.py ${PATH_DATASET_ALL_CSV} "data/csvs" --train_size 0.75 -v

python train_model.py \

--n_iter ${N_ITER} \

--path_dataset_csv ${PATH_DATASET_TRAIN_CSV} \

--dataset_kwargs "${DATASET_KWARGS}" \

--bpds_kwargs "${BPDS_KWARGS}" \

--path_run_dir ${RUN_DIR} \

--gpu_ids ${GPU_IDS}

Re: SyntaxError: invalid syntax

Verfasst: Mittwoch 3. April 2019, 18:22
von helloworld
Das eben gepostete Skript wurde dann im Ubuntu Terminal als Shell-Skript aktiviert. Es ist auch gestartet, hat dann aber mit dieser Fehlermeldung abgebrochen:
File "scripts/train_model.py", line 3
DATASET=${1:"-dna"}
^
SyntaxError: invalid syntax
Mir ist jetzt leider nicht klar, wo das Shell Skript als Python ausgefuehrt wurde, da es im Terminal als Shell-Skript aktiviert wurde.

Danke schonmal!

Re: SyntaxError: invalid syntax

Verfasst: Mittwoch 3. April 2019, 18:25
von __blackjack__
@helloworld: Was heisst „als Shell-Skript aktiviert“? Und was steht in `scripts/train_model.py` drin?

Re: SyntaxError: invalid syntax

Verfasst: Mittwoch 3. April 2019, 18:27
von helloworld
Das hier ist das scripts/train_model.py:

#!/bin/bash -x



DATASET=${1:-dna}

N_ITER=50000

RUN_DIR="saved_models/${DATASET}"

PATH_DATASET_ALL_CSV="data/csvs/${DATASET}.csv"

PATH_DATASET_TRAIN_CSV="data/csvs/${DATASET}/train.csv"

GPU_IDS=${2:-0}



DATASET_KWARGS="{\

\"transform_signal\": [\"fnet.transforms.Normalize()\", \"fnet.transforms.Resizer((1, 0.37241, 0.37241))\"], \

\"transform_target\": [\"fnet.transforms.Normalize()\", \"fnet.transforms.Resizer((1, 0.37241, 0.37241))\"] \

}"

BPDS_KWARGS="{\

\"buffer_size\": 1 \

}"



cd $(cd "$(dirname ${BASH_SOURCE})" && pwd)/..



python scripts/python/split_dataset.py ${PATH_DATASET_ALL_CSV} "data/csvs" --train_size 0.75 -v

python train_model.py \

--n_iter ${N_ITER} \

--path_dataset_csv ${PATH_DATASET_TRAIN_CSV} \

--dataset_kwargs "${DATASET_KWARGS}" \

--bpds_kwargs "${BPDS_KWARGS}" \

--path_run_dir ${RUN_DIR} \

--gpu_ids ${GPU_IDS}

Re: SyntaxError: invalid syntax

Verfasst: Mittwoch 3. April 2019, 18:32
von helloworld
Im Ubuntu Terminal wurde folgendes eingegeben: (und damit das sh Skript aktiviert/ gestartet)
chmod u+x ./train_model.sh

Damit wurde das Skript gestartet. Im Skript selbst (s.oben) steht dann jedoch irgendwann: python train_model.py

Re: SyntaxError: invalid syntax

Verfasst: Mittwoch 3. April 2019, 18:39
von Sirius3
Du hast da mit einem Shellskript das ursprüngliche Python-Skript überschrieben. Fang nochmal von vorne an.

Re: SyntaxError: invalid syntax

Verfasst: Mittwoch 3. April 2019, 18:46
von helloworld
Hmm, ok. Danke!

Re: SyntaxError: invalid syntax

Verfasst: Donnerstag 4. April 2019, 04:21
von snafu
Man kann einer Programmiersprache nicht einfach ein Skript in einer "Fremdsprache" vorsetzen. Python versteht nur Python. Es kann Bash und andere Shell-Syntax genau so wenig verstehen wie PHP oder JavaScript. Du hast da irgendwo ein Beispiel übernommen, das für eine andere Sprache gedacht ist.

Am Anfang deiner Datei steht #!/bin/bash -x, was ja auf die Bash hindeutet. Das Skript sollte, sofern es via chmod +x deinskript.sh ausführbar gemacht wurde, dann auch in der Bash laufen. Der Aufruf dazu ist ./deinskript.sh bzw eine andere Pfadangabe falls du nicht im selben Ordner wie das Skript bist. Wie da plötzlich Python ins Spiel kommt, lässt sich aus deinen Angaben nicht erklären.

Re: SyntaxError: invalid syntax

Verfasst: Donnerstag 4. April 2019, 09:10
von __blackjack__
@snafu: Python kommt ins Spiel weil das in dem zuerst gezeigten Bash-Skript explizit mit Python aufgerufen wird. Das hat als letzte Anweisung ja das hier stehen:

Code: Alles auswählen

# …

python train_model.py \

       --n_iter ${N_ITER} \

       --path_dataset_csv ${PATH_DATASET_TRAIN_CSV} \

       --dataset_kwargs "${DATASET_KWARGS}" \

       --bpds_kwargs "${BPDS_KWARGS}" \

       --path_run_dir ${RUN_DIR} \

       --gpu_ids ${GPU_IDS}
Und da ist dann egal das bei `train_model.py` die Bash in der She-Bang-Zeile steht.

Re: SyntaxError: invalid syntax

Verfasst: Donnerstag 4. April 2019, 12:11
von helloworld
@blackjack, genau: es ist ein shell skript und python wird aktiviert. Zu meinem Verstaendnis, kommt Python erst an der Stelle ins Spiel, wo es steht und beieht sich auf die nachfolgenden Dinge :

python train_model.py \

--n_iter ${N_ITER} \

--path_dataset_csv ${PATH_DATASET_TRAIN_CSV} \

--dataset_kwargs "${DATASET_KWARGS}" \

--bpds_kwargs "${BPDS_KWARGS}" \

--path_run_dir ${RUN_DIR} \

--gpu_ids ${GPU_IDS}

ODER, so verstehe ich es, wird das gesamte Skript von python gelesen?

Das merkwuerdige ist, dass ich meine Anaconda Umgebung extra auf python 2 (2.7.8) eingestellt habe, ich im terminal aber auch Syntax Error bekomme, wenn ich im Skript nicht auf python3 train_model.py aendere. Koennte das das Problem sein?

Re: SyntaxError: invalid syntax

Verfasst: Donnerstag 4. April 2019, 12:55
von __deets__
Bitte den vollen SyntaxError posten, und bitte auch den INHALT von train_model.py.