Python, breaking out of infinite loop
Hi,
I have a a python app which reads in data from a bluetooth module. I have an infinite loop as the data is continuous, but i want the user to be able to break out of it if he so wishes to close the program, rather than using ctrl+C eg, "Do you want to quit? y/n?" now i cant use input() as it just waits for a key press - i want the loop to be still running. Any ideas? thanks |
Use threads?
|
multiprocessing
This is classic multiprocessing question. There are several architectures that could be used.
I guess the first question is whether this is unix or windoze. If unix, the simplest might be to use a separate process, then when the user wants to quit, the process group could be sent a signal (kill). |
yeah its for linux.
thanks for the ideas. |
...select and try/except.
in your main loop
poll using use select.select on sys.stdin then if a key comes in or ^C or a sig 15 is sent to your process it will ask, but IF you are using a process ,it will hang in the background waiting for input. try: ## no wait arguments, I dont have the book open so dont ding my syntax if select.select ((sys.stdin,"","")) ch=sys.stdin.read() (one or more char's avaible in buffer) deal with... keep looping except termsig handler (look up exceptions) except some other error... print Crud |
interesting, i will give that a go when i get some time.
|
Maybe Using Sockets in Two Threads, server and client
It's a easy way to implement a Inter Process Communication. http://docs.python.org/library/socket.html The server loop runs a daemon listening all time to the client. The client ask the user about leaving the application. When the user say Y, send a string to the server and sys.exit(0) |
yes but....
Quote:
oooh...I've written several "servers" with a terminate option you have to be careful about when you can respawn and dangling multiple clients, as well you may have to muck some deep level socket options (aka TCP wait) and functionality. I hadnt mentioned that as its kinda a pain, and I felt the originator of the thread is just recently coming to python. BUT if you stick to one of the newer-predefined class templates its not too bad. (or you've done sockets in C) Incidentally, I daemonize simply by sh MyPython.py &, but usually keep a term window open for the process while I'm debugging or adding functionality, the main issue with threading is gui/stdio access. |
All times are GMT -5. The time now is 02:22 AM. |