2015-12-30 22 views
1

Предположим, что я пишу такую ​​программу.Как изменить параметры без остановки программы

# run the program until the user gives a "stop" input 
usrinpt=""` 
n=1 
while usrinpt!="stop": 
    n+=1 
    ---- do-something ----- 
    ---- do-something ----- 
    ---- do-something ----- 
print n # print the number of loops it has gone through. 

программа теперь будет работать, пока я вручную изменить значение параметра usrinpt «остановить». Но использование raw_input остановит симуляцию на каждом шаге, который не то, что я хочу.

Итак, есть ли способ изменить usrinpt без остановки моделирования?

ответ

1

Более сложный раствор, используя нить:

from __future__ import print_function # Python 2/3 compatibility 

import sys 
from time import sleep 
from threading import Thread 

if sys.version_info.major < 3: 
    input = raw_input 

def do_something(): 
    # doing the work 
    sleep(1) 

usrinpt = '' 

def main(): 
    n = 1 
    while usrinpt != 'stop': 
     n += 1 
     do_something() 
    print('\nnumber of loops', n) 

thread = Thread(target=main) 
thread.start() 

while True: 
    print('Enter "stop" to terminate program') 
    usrinpt = input().strip().lower() 
    if usrinpt == 'stop': 
     break 

thread.join() 

Пример выполнения программы:

python stop.py 
Enter "stop" to terminate program 
hello 
Enter "stop" to terminate program 
stop 

number of loops 6 
1

Вы можете поймать KeyboardInterrupt исключение:

from __future__ import print_function # Python 2/3 compatibility 

n = 1 
try: 
    while True: 
     n += 1 
except KeyboardInterrupt: 
    print('\nnumber of loops', n) 

Когда пользователь <CTRL>-<C> программа печатает количество итераций и продолжается.

+0

это, конечно, работает, но есть способ сделать это без использования прерываний –

Смежные вопросы