Reputation: 970
I use Python 3.7.1 (default, Dec 14 2018, 19:28:38).
First of all my script is running correctly the second time I enter a correct entry in input()
, but I prefer it asks only once.
In my code I wrote print()
lines in order to see what is happening in real time and that's where I don't get what happens in the execution.
Let's see the script:
import subprocess
from scrapy import cmdline
import sys
champ_choix = ""
while champ_choix != "1" and champ_choix != "2":
champ_choix=input("Pour cat_course tapez 1\nPour hippodrome tapez 2\n")
print("L'input est : {}".format(champ_choix)) #the input is:
print("le type de l'input est: {}".format(type(champ_choix))) #the type of input is:
if champ_choix == "1": #Traite le champ hippodrome
print("on a le champ_choix 1") #we have got choice 1
#do instructions
sys.exit() #to stop the script and stop asking once again an entry after it is done
if champ_choix == "2":
print("le champ_choix est 2") #we have got choice 2
cmdline.execute(['scrapy','crawl','test_shell','-a','nom_prix=True'])
sys.exit()
Now what I have in the terminal is:
Pour cat_course tapez 1
Pour hippodrome tapez 2
2 # here a good entry
L'input est : 2 # it says it is a good entry
le type de l'input est: <class 'str'> # it even says that's the good type
le champ_choix est 2 # it even says it is in the second `if` condition
Pour cat_course tapez 1 # but it asks once again, without executing instructions
Pour hippodrome tapez 2
2 # a good entry once more
L'input est : 2
le type de l'input est: <class 'str'>
le champ_choix est 2 # in the second `if` condition and now gonna finally execute instructions
#Running the spider as expected, that is alright
#Stop and exit, it is alright too
What is wrong?
Upvotes: 0
Views: 56
Reputation: 7887
Well worded question (props for giving the stdout) but make sure you are doing proper spacing (i.e. there should be a space before and after operators such as a == b
).
1) Don't use sys.exit()
just use break
.
2) You need to prime your loop. In other words do one input before you
enter the loop then keep inputting at the END of your loop:
import subprocess
from scrapy import cmdline
import sys
while True:
champ_choix = input("Pour cat_course tapez 1\nPour hippodrome tapez 2\n")
# This first if isn't needed because the if at the bottom catches this case
# if champ_choix == "1": #Traite le champ hippodrome
# break
if champ_choix == "2":
cmdline.execute(['scrapy','crawl','test_shell','-a','nom_prix=True'])
if champ_choix in ["1", "2"]:
break
Upvotes: 1