2016-05-07 1 views
0

Ich habe ein Bash-Skript basierend auf this und this geschrieben. Das Skript ist:Wie schreibe ich ein Bash-Skript, das ein Python-Programm ausführt, das mit Parametern neu startet

#!/bin/bash 
until python data.py $1 $2 ; do 
    echo "'data.py' crashed with exit code $?. Restarting..." >> errors.txt 
    sleep 1 
done 

Ich betreibe es:

./run.sh ‘a’ ‘n’ 

aber in data.py

if sys.argv[1] == 'a': 

false zurück. Wie gebe ich $ 1 und $ 2 an mein Python-Programm weiter? TIA !!!

EDIT: SOLUTION

Dank Jandom und andlrc: Ich nenne es:

./run.sh "a" "n" 

und das Skript ändern:

until python data.py "[email protected]" ; do 
+4

Sind diese wirklich '' '(d. H. [U 'u2018''] (http://www.charbase.com/2018-unicode-left-single-quotation-mark))? Denn dann, 'sys.argv == [script_name, 'a' ',' 'b' ']', wahrscheinlich. – dhke

Antwort

2

Sie senden spezielle Anführungszeichen Ihres Shell-Skript:

% charinfo ‘’ 
U+2018 SINGLE TURNED COMMA QUOTATION MARK [Pi] 
U+2019 SINGLE COMMA QUOTATION MARK [Pf] 

Run es mit einfachen oder doppelten Anführungszeichen:

./run.sh "a" "b" 

auch Zitate in Ihrem bash-Skript erinnern oder $1 und $2 wird Wort Spaltung unterzogen:

#!/bin/bash 
until python data.py "$1" "$2"; do 
    echo "'data.py' crashed with exit code $?. Restarting..." >> errors.txt 
    sleep 1 
done 

Wie bereits ausgeführt, bevor Sie "[email protected]" verwenden können, die für alle Argumente senden zu Ihrem Bash-Skript verweisen.

+0

Tut mir leid, ich denke im Nachhinein hätte ich diese Antwort akzeptieren sollen. – schoon

+0

@schoon Sie können die akzeptierte Antwort immer ändern. Aber es macht mir nichts aus, Janom das Akzeptierte zu überlassen. – andlrc

3

script.sh (stellen Sie sicher, dass es erlauben ausführen)

#!/bin/sh 
python script.py "[email protected]" 

script.py (erster param ist ./script.sh wenn als ./script.sh vom Terminal ausgeführt werden), so, script.py:

import sys 
print(sys.argv[1:]) 
# sys.argv[1] == a, sys.argv[2] == b, etc..