Python2.x是否获取signalnum的unix信号名(代码)?
从信号代码中获取信号名称是否有更具python风格的方法?我目前的做法是:Python2.x是否获取signalnum的unix信号名(代码)?,python,unix,signals,idioms,Python,Unix,Signals,Idioms,从信号代码中获取信号名称是否有更具python风格的方法?我目前的做法是: import signal dict((getattr(signal,na),na) for na in dir(signal) if na[:3]=='SIG') 我在2.7文档中查找这样的地图,但没有成功。如果它有一个,它逃避我。有更好的方法吗?你可以使用听写理解,我认为这看起来更好一些: {getattr(signal, n) : n for n in dir(signal) if n.startswith('S
import signal
dict((getattr(signal,na),na) for na in dir(signal) if na[:3]=='SIG')
我在2.7文档中查找这样的地图,但没有成功。如果它有一个,它逃避我。有更好的方法吗?你可以使用听写理解,我认为这看起来更好一些:
{getattr(signal, n) : n for n in dir(signal) if n.startswith('SIG')}
而且,你最初的理解过于复杂。在中为n添加了一个额外的,而您不需要它。你可以这样写:
dict((getattr(signal,n),n) for n in dir(signal) if n[:3] == 'SIG')
我不认为Python提供了这样的int->name映射。就个人而言,我不会在这里使用列表理解,因为我发现代码太难阅读n[:3]
可以写成n.startswith('SIG')
,通常在第二部分中使用n
似乎有误导性,因为它不是一个数字,而是一个符号名。@FelixSchwarz hm,我在名称中使用了n
。编辑到na
过度复杂:你说得对,我做了编辑!听写理解:当然更好。哪一个是支持它的python的最低版本?(不幸的是,我需要支持一些旧版本)。@naxa Dict理解为2.7+。如果您需要早期支持,则必须使用dict(…)
方法。请注意,上述方法可能会错误地报告,例如SIG\u SETMASK
而不是SIGINT
。例如,如果n.startswith('SIG')而不是n.startswith('SIG')},则更改为{getattr(signal,n):n表示dir(signal)中的n。