curl / Mailing Lists / curl-users / Single Mail
Buy commercial curl support from WolfSSL. We help you work out your issues, debug your libcurl applications, use the API, port to new platforms, add new features and more. With a team lead by the curl founder himself.

Re: Making Python Script Exit Completely with One Ctrl+C

From: Hongyi Zhao via curl-users <curl-users_at_lists.haxx.se>
Date: Tue, 12 Dec 2023 08:12:42 +0800

On Sun, Dec 10, 2023 at 2:44 PM Hongyi Zhao <hongyi.zhao_at_gmail.com> wrote:
>
> On Sun, Dec 10, 2023 at 1:47 PM Dan Fandrich via curl-users
> <curl-users_at_lists.haxx.se> wrote:
> >
> > On Sun, Dec 10, 2023 at 12:35:16PM +0800, Hongyi Zhao via curl-users wrote:
> > > But I still cannot figure out how to achieve the same purpose with the
> > > following methods:
> > >
> > > 1. Using the following method suggested by you:
> > >
> > > You'll probably have to block SIGINT before calling calling into pycurl, then
> > > unblocking in the progress callback to check it, e.g.
> > [...]
> > > 2. Using a pure try-expect-based method.
> >
> > What do you mean "pure try-expect-based method"? You mean without touching
> > signal masks?
>
> I mean without importing/relying on the signal module.
>
> > As long as you're calling non-Python based C libraries, you're
> > out of the realm of pure Python. If PyCurl were instead 100% Python, the
> > KeyboardInterrupt would be raised as you expect and you could catch it
> > normally. But in this case, not only is the interrupt happening while running
> > C code, it's happening while running C code from Python while calling back to C
> > code that in turn is calling code in Python. Handling that as this code now is
> > in pure Python without having to drop to writing a C extension seems pretty
> > good to me.
>
> Do you mean the code implementation I've already posted here based on your tips?
>
> > The alternative SIGINT handler solution should also work and may
> > be more elegant, depending on your point of view.
>
> I've already used the following code snippet:
>
> def sigint_handler(signal, frame):
> print(f"KeyboardInterrupt at line {frame.f_lineno}")
> sys.exit(0)
>
> signal.signal(signal.SIGINT, sigint_handler)
>
>
> So, I don't understand why you still like the above.

I meant to say the following:

So, I don't understand why you still said the above words.

> > In any case, the issue has turned out to be unrelated to the topic of this
> > list, so you're better off finding a PyCurl forum if you prefer another
> > solution.
> >
> > Dan
>
> Zhao
>
> > --
> > Unsubscribe: https://lists.haxx.se/mailman/listinfo/curl-users
> > Etiquette: https://curl.se/mail/etiquette.html
-- 
Unsubscribe: https://lists.haxx.se/mailman/listinfo/curl-users
Etiquette:   https://curl.se/mail/etiquette.html
Received on 2023-12-12