LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Programming (https://www.linuxquestions.org/questions/programming-9/)
-   -   Python, breaking out of infinite loop (https://www.linuxquestions.org/questions/programming-9/python-breaking-out-of-infinite-loop-723369/)

edM 05-03-2009 02:28 PM

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

vinay_s_s 05-03-2009 04:41 PM

Use threads?

nbecker 05-03-2009 05:15 PM

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).

edM 05-03-2009 05:20 PM

yeah its for linux.

thanks for the ideas.

SJ-AvatarSmith 05-04-2009 05:25 AM

...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

edM 05-04-2009 11:54 AM

interesting, i will give that a go when i get some time.

andreski 05-04-2009 11:08 PM

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)

SJ-AvatarSmith 05-05-2009 11:27 PM

yes but....
 
Quote:

Originally Posted by andreski (Post 3530325)
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)

---------------------------
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.