Pytanie Jak wstrzymać i czekać na dane wejściowe polecenia w skrypcie pythona


Czy w pythonie można mieć skrypt podobny do następującego?

...
Pause
->
Wait for the user to execute some commands in the terminal (e.g. 
  to print the value of a variable, to import a library, or whatever).
The script will keep waiting if the user does not input anything.
->
Continue execution of the remaining part of the script

Zasadniczo skrypt daje tymczasowo kontrolę interpreterowi wiersza poleceń Pythona i jest wznawiany po tym, jak użytkownik w jakiś sposób zakończy tę część.

Edytować: To, co wymyślę (zainspirowane odpowiedzią), wygląda następująco:

x = 1

i_cmd = 1
while True:
  s = raw_input('Input [{0:d}] '.format(i_cmd))
  i_cmd += 1
  n = len(s)
  if n > 0 and s.lower() == 'break'[0:n]:
    break
  exec(s)

print 'x = ', x
print 'I am out of the loop.'

12
2017-11-21 20:15


pochodzenie


To pytanie wymaga REPL (Czytaj-Eval-Print-Loop). Istnieje kilka sugestii podobne pytanie, włącznie z code.InteractiveInterpreter() i pdb. - Possum


Odpowiedzi:


jeśli używasz Pythona 2.x: raw_input()

python 3.x: input()

Przykład:

# do some stuff in script
variable = raw_input('input something!: ')
# do stuff with variable

24
2017-11-21 20:16



Dzięki, ale może nie jestem wystarczająco jasny. Chcę tylko, aby skrypt zatrzymał się w pewnym momencie (pozycja jest określona podczas pisania skryptu), następnie przekazuje kontrolę interpreterowi, aby użytkownik mógł zrobić wszystko, czego chce, na przykład, aby wydrukować coś, zaimportować jakąś bibliotekę, lub nawet całkowicie opuścić cały skrypt. Jest to powszechne w niektórych językach skryptów do obliczeń naukowych (takich jak IDL), ale nie jestem pewien, czy jest to możliwe w pythonie. Przypuszczam, że funkcja raw_input () nie może tego zrobić? - FJDU
Cóż, może mogę użyć exec (), aby wykonać zwracany ciąg raw_input. - FJDU
hmmm Nie wiem, w jaki sposób zapewnić użytkownikowi pełną kontrolę nad tłumaczem w środku skryptu .... możesz być w stanie zbliżyć się do tego, używając eval() i używaj tego, aby wykonać wszystko, co wprowadzi użytkownik, a następnie wykonaj coś trudnego, aby go otworzyć. - Cameron Sparr
Ale input  robi odczytać i uruchomić kod Pythona !? Po prostu włóż go w pętlę i sprawdź "zamknij". docs.python.org/2/library/functions.html#input - John Mee
@JohnMee Sprawdziłem ten dokument i stwierdziłem, że użył on eval zamiast exec, co oznacza, że ​​wielu poleceń nie można wykonać. Na przykład nie mogę "wydrukować x" ani "wydrukować (x)". W każdym razie myślę, że muszę owinąć input lub raw_input w nieskończoną pętlę i zakończyć pętlę, gdy użytkownik wprowadzi ciąg znaków, taki jak b [reak]. - FJDU


Najlepszym sposobem, aby to zrobić, jest użycie debuggera pdb. Więc włóż

import pdb

w górnej części programu użyj

pdb.set_trace()

za twoją "pauzę" Po pytaniu (Pdb) możesz wpisać polecenia, takie jak

(Pdb) print 'x = ', x

możesz też przejść przez kod, ale to nie jest twój cel. Kiedy skończysz, po prostu wpisz

(Pdb) c 

lub dowolny podzbiór wyrazu "kontynuuj", a kod wznowi wykonywanie.

Łatwe łatwe wprowadzenie do debuggera od listopada 2015 jest na https://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/ ale istnieje oczywiście wiele takich źródeł, jeśli używasz google "python debugger" lub "python pdb".


6
2017-12-01 21:44





myślę, że tego szukałeś:

import re

# Get user's name
name = raw_input("Please enter name: ")

# While name has incorrect characters
while re.search('[^a-zA-Z\n]',name):

    # Print out an error
    print("illegal name - Please use only letters")

    # Ask for the name again (if it's incorrect, while loop starts again)
    name = raw_input("Please enter name: ")

1
2018-06-16 19:39