【问题标题】:python module 'signal' has no attribute 'SIGHUP' and other signalspython模块'signal'没有属性'SIGHUP'和其他信号
【发布时间】:2019-11-10 09:32:43
【问题描述】:
C02TPARXG8WN:fal$ python
Python 3.6.9 (default, Nov 10 2019, 01:00:31) 
[GCC 4.2.1 Compatible Apple LLVM 10.0.0 (clang-1000.10.44.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import signal
>>> signal.SIGHUP
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'signal' has no attribute 'SIGHUP'
>>> 

在 macos 上测试信号。无法弄清楚为什么不断收到信号错误

C02TPARXG8WN:~ fc$ trap -l

1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGEMT 8) SIGFPE 9)SIGKILL 10)SIGBUS 11)SIGSEGV 12)SIGSYS 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGURG 17) SIGSTOP 18) SIGTSTP 19) SIGCONT 20) SIGCHLD 21) SIGTTIN 22) SIGTTOU 23) SIGIO 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29)SIGINFO 30)SIGUSR1 31)SIGUSR2

在我的系统中,“trap -l”显示选择的信号

【问题讨论】:

  • 试试dir(signal) 看看定义了什么。顺便说一句,我的 Mac 确实有 SIGHUP。
  • 如果要查看 Python 中定义的信号,需要运行我在 Python 中建议的命令。
  • 我试过了。但没有定义任何信号1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGEMT 8) SIGFPE 9) SIGKILL 10) SIGBUS 11) SIGSEGV 12) SIGSYS 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGURG 17) SIGSTOP 18) SIGTSTP 19) SIGCONT 20) SIGCHLD 21) SIGTTIN 22) SIGTTOU 23) SIGIO 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGINFO 30) SIGUSR1 31)跨度>
  • 嗯?肯定是第一个吧?
  • dir(signal) ['SignalHandler', 'builtins', 'cached', 'doc', 'file', 'loader', 'name', 'package', 'spec', '信号', '时间']

标签: python-3.x macos gcc clang


【解决方案1】:

基于documentation,我猜要么您的设备没有在signal.h 内定义SIGHUP,要么您的python 解释器构建在与您的设备不完全相等的设备上。如果您确定定义了SIGHUP,那么您最好的猜测是自己重新安装甚至编译python。

【讨论】:

  • sudo find / -name "signal.h" | xargs grep "SIGHUP" 它显示:/usr/include/sys/signal.h:#define SIGHUP 1 /* hangup */
【解决方案2】:

我在SIGHUP 使用之前使用此代码使其在 Windows 上运行,可能也适用于 OS X,但我没有办法对其进行测试:

import platform
if platform.system() != 'Linux':
    signal.SIGHUP = 1

之后是 SIGHUP 的使用,因为 1 是 Linux 上的初始值,所以它会像预期的那样工作。

由于 Python 3.7 signal.SIGHUP 仅适用于 Unix 系统,因此不包括 Windows...

我使用了platform.system() != 'Linux,因为我的脚本只能在 Windows 和 Linux 上运行,但您可以根据自己的需要调整它。

平台文档:https://docs.python.org/3/library/platform.html#platform.system

信号文档:enter link description here

Linux 上的 signal.SIGHUP 值

>>> import signal
>>> signal.SIGHUP
1

【讨论】:

    猜你喜欢
    • 2022-12-15
    • 2021-11-21
    • 1970-01-01
    • 2023-04-06
    • 2013-12-15
    • 1970-01-01
    • 2017-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多