Domanda

Sono molto nuovo a Python, quindi perdonami se questa domanda è molto semplice.

Sto cercando di gestire un interrupt della tastiera accettando i dati da una presa utilizzando il modulo Select. Quindi, ho una chiamata di funzione select.select () per attendere i dati dal socket, quindi superarli in console.

Quando premo CTRL_C, sembra che a volte ricevo un'eccezione select.error e talvolta eccezioni. Il codice di errore corrispondente è 4 per entrambe le eccezioni.

Esiste un codice che gestisce la tastiera più in profondità nell'eccezione nello stack di chiamata, quindi quando ottengo un Sigint nella funzione in cui accetto una connessione socket, voglio solo raisere di eccezione da tastiera. Voglio anche catturare eccezioni relative alla connessione.

Sarebbe sicuro verificare il codice di errore di Exception e sollevare la tastiera se è 4? Ciò influenzerà la mia capacità di catturare eccezioni legate alla connessione? Esiste una buona risorsa sui codici di errore?

Grazie!

È stato utile?

Soluzione

Uso errno.EINTR invece. È sicuro.

>>> import errno
>>> errno.EINTR
4

Tuttavia, questo non ti dirà quale segnale ha interrotto la chiamata di sistema, solo quella alcuni Il segnale lo ha interrotto.

Da Man 2 Seleziona:

EBADF  An  invalid file descriptor was given in one of the sets.  (Per‐
       haps a file descriptor that was already closed, or one on  which
       an error has occurred.)

EINTR  A signal was caught; see signal(7).

EINVAL nfds  is  negative  or  the  value  contained  within timeout is
       invalid.

ENOMEM unable to allocate memory for internal tables.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top