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: Sat, 9 Dec 2023 09:37:18 +0800

On Fri, Dec 8, 2023 at 10:44 AM Dan Fandrich via curl-users
<curl-users_at_lists.haxx.se> wrote:
>
> On Fri, Dec 08, 2023 at 09:56:44AM +0800, Hongyi Zhao via curl-users wrote:
> > I tried the following method but in vain:
> [...]
> > try:
> > pass
> > except KeyboardInterrupt:
> > kb_interrupt = True
>
> This won't accomplish anything because "pass" will never raise an exception.
> I have a feeling that even putting the entire contents of the progress callback
> into a try/except block won't even help; I suspect the exception is raised the
> moment the Python interpreter is returned to by pycurl while calling that
> callback, which is before even that point.
>
> You'll probably have to block SIGINT before calling calling into pycurl, then
> unblocking in the progress callback to check it, e.g.
>
> ...
> signal.pthread_sigmask(signal.SIG_BLOCK, [signal.SIGINT])
> c.perform()
> signal.pthread_sigmask(signal.SIG_UNBLOCK, [signal.SIGINT])
> ...
>
> def progress(...):
> try:
> signal.pthread_sigmask(signal.SIG_UNBLOCK, [signal.SIGINT])
> except KeyboardInterrupt:
> print('interrupted!')
> return 1
> finally:
> signal.pthread_sigmask(signal.SIG_BLOCK, [signal.SIGINT])
>
> or just set your own SIGINT handler that sets a flag (kb_interrupt), then check
> that flag in the progress callback and return an error if it's set.

I tried using the first method of your tips. It works, but the
calculated *Average Speed* is too high, as shown below:

(datasci) werner_at_X10DAi:~/Desktop$ python callback-SIGINT.py
Proxy: SG_ssr_futeapbquf5m.nodelist.club_1453_018d83c677e05e71f172014fc3f45e39
Current Speed: 1371.74 kB/s
Current Speed: 6565.90 kB/s
Average Speed: 7552.72 kB/s
Proxy: HK_ssr_wo8o8npg4fny.nodelist.club_1303_b5bf85111d0f51c517ec7302d3f33ce1
Current Speed: 1252.55 kB/s
Current Speed: 7461.93 kB/s
Average Speed: 8807.27 kB/s
Proxy: SG_ssr_futeapbquf5m.nodelist.club_1354_ddfba110eddfdb7037f389e9b5917477
Current Speed: 3081.76 kB/s
Current Speed: 9351.58 kB/s
Average Speed: 10745.23 kB/s
Proxy: HK_ssr_fwqvvo60u1mj.nodelist.club_1423_dba3b0996744e7b82eae7634626a5ba9
^Cinterrupted!
Average Speed: 156.74 kB/s
Proxy: SG_ssr_futeapbquf5m.nodelist.club_1356_8ce27b1301fcbcb77cc5abb28cb127a6
Script terminated by user. Exiting.

I'm not sure how to fix this problem. Attached please find the test script.

Regards,
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-09