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
- Contemporary messages sorted: [ by date ] [ by thread ] [ by subject ] [ by author ] [ by messages with attachments ]
From: Hongyi Zhao via curl-users <curl-users_at_lists.haxx.se>
Date: Sat, 9 Dec 2023 09:49:01 +0800
On Sat, Dec 9, 2023 at 9:37 AM Hongyi Zhao <hongyi.zhao_at_gmail.com> wrote:
>
> 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.
I tried another method which also had the same problem:
(datasci) werner_at_X10DAi:~/Desktop$ python rev-2.py
Proxy: SG_ssr_futeapbquf5m.nodelist.club_1453_018d83c677e05e71f172014fc3f45e39
Current Speed: 664.56 kB/s
Current Speed: 7691.08 kB/s
Average Speed: 9403.12 kB/s
Proxy: HK_ssr_wo8o8npg4fny.nodelist.club_1303_b5bf85111d0f51c517ec7302d3f33ce1
Current Speed: 950.39 kB/s
Current Speed: 6146.08 kB/s
Average Speed: 7297.46 kB/s
Proxy: SG_ssr_futeapbquf5m.nodelist.club_1354_ddfba110eddfdb7037f389e9b5917477
^CTraceback (most recent call last):
File "/home/werner/Desktop/rev-2.py", line 60, in progress
def progress(download_t, download_d, upload_t, upload_d):
KeyboardInterrupt
> Regards,
> Zhao
>
> > --
> > Unsubscribe: https://lists.haxx.se/mailman/listinfo/curl-users
> > Etiquette: https://curl.se/mail/etiquette.html
Received on 2023-12-09
Date: Sat, 9 Dec 2023 09:49:01 +0800
On Sat, Dec 9, 2023 at 9:37 AM Hongyi Zhao <hongyi.zhao_at_gmail.com> wrote:
>
> 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.
I tried another method which also had the same problem:
(datasci) werner_at_X10DAi:~/Desktop$ python rev-2.py
Proxy: SG_ssr_futeapbquf5m.nodelist.club_1453_018d83c677e05e71f172014fc3f45e39
Current Speed: 664.56 kB/s
Current Speed: 7691.08 kB/s
Average Speed: 9403.12 kB/s
Proxy: HK_ssr_wo8o8npg4fny.nodelist.club_1303_b5bf85111d0f51c517ec7302d3f33ce1
Current Speed: 950.39 kB/s
Current Speed: 6146.08 kB/s
Average Speed: 7297.46 kB/s
Proxy: SG_ssr_futeapbquf5m.nodelist.club_1354_ddfba110eddfdb7037f389e9b5917477
^CTraceback (most recent call last):
File "/home/werner/Desktop/rev-2.py", line 60, in progress
def progress(download_t, download_d, upload_t, upload_d):
KeyboardInterrupt
> 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
- text/x-python attachment: rev-2.py