小编Gio*_*nni的帖子

在右下角调用addch时,curses失败了

我开始学习Python中的curses.我在Mac OS X上使用Python 3.5.当我尝试在右下角写入时,程序崩溃并出现以下错误:

$ python ex_curses.py
[...]
  File "ex_curses.py", line 19, in do_curses
    screen.addch(mlines, mcols, 'c')
  _curses.error: add_wch() returned ERR
Run Code Online (Sandbox Code Playgroud)

示例程序是:

import curses

def do_curses(screen):
    curses.noecho()
    curses.curs_set(0)
    screen.keypad(1)

    (line, col) = 12, 0
    screen.addstr(line, col, "Hello world!")
    line += 1
    screen.addstr(line, col, "Hello world!", curses.A_REVERSE)

    screen.addch(0, 0, "c")

    (mlines, mcols) = screen.getmaxyx()
    mlines -= 1
    mcols -= 1
    screen.addch(mlines, mcols, 'c')

    while True:
        event = screen.getch()
        if event == ord("q"):
            break
    curses.endwin()

if __name__ == "__main__":
    curses.wrapper(do_curses)
Run Code Online (Sandbox Code Playgroud)

我有一种感觉,我错过了一些明显的东西,但我不知道是什么.

python ncurses python-curses

9
推荐指数
2
解决办法
1445
查看次数

如何设计一个库公共api避免暴露内部?

我正在学习python.我试图了解如何设计一个公开api的库.我希望避免暴露将来可能发生变化的内部方法.我正在寻找一种简单而pythonic的方式来做到这一点.我有一个包含一堆类的库.这些类的一些方法在类内部使用.我不想将这些方法暴露给客户端代码.

假设我的库(fe mylib)包含一个C带有两个方法的类,一个C.public()方法被认为是从客户端代码和C.internal()方法中使用的方法,用于对库代码进行一些工作.我想将自己提交给公共api(C.public()),但我希望C.internal()将来可以更改方法,例如添加或删除参数.

以下代码说明了我的问题:

mylib/c.py:

class C:
    def public(self):
        pass

    def internal(self):
        pass
Run Code Online (Sandbox Code Playgroud)

mylib/f.py:

class F:
    def build():
        c = C()
        c.internal()
        return c
Run Code Online (Sandbox Code Playgroud)

mylib/__init__.py:

from mylib.c import C
from mylib.f import F
Run Code Online (Sandbox Code Playgroud)

client/client.py:

import mylib
f = mylib.F()
c = f.build()
c.public()
c.internal()  # I wish to hide this from client code
Run Code Online (Sandbox Code Playgroud)

我想到了以下解决方案:

  • 仅记录公共API,警告文档中的用户不要使用私有库api.和平相处,希望客户只使用公共API.如果下一个库版本中断客户端代码是客户端错误:).

  • 使用某种形式的命名约定,fe为每个方法添加前缀"_",(它保留用于受保护的方法并向ide引发警告),也许我可以使用其他前缀.

  • 使用对象组合来隐藏内部方法.例如,库可以返回仅PC嵌入C对象的客户端对象.

mylib/pc.py:

class PC: …
Run Code Online (Sandbox Code Playgroud)

python

6
推荐指数
1
解决办法
471
查看次数

Prometheus:从标签值中提取子字符串?

我在同一台主机上有类似的服务。例如,我有两个名为 mysql01 e mysql02 的 mysql 服务器。我mysqld_exporter为每个 mysql 服务器安装了两个。标签实例的值为instance="<host>-mysql01"instance="<host>-mysql02"。我也安装node_exporter在同一台主机上。

我希望将 mysql_exporter 系列与 node_exporter 系列联系起来。例如,在专用于 的同一个 grafana 仪表板上,mysql0x我希望可视化有关交换内存和缓冲池大小的指标。所以我需要可视化以下系列:

mysql_global_variables_innodb_buffer_pool_size{instance="<host>-mysql0x"}
node_memory_SwapTotal_bytes{instance="<host>"}
Run Code Online (Sandbox Code Playgroud)

如何从实例标识数据中抽取<host>-mysql0xhost一部分?

作为奖励问题:在同一主机上标记类似服务有最佳实践吗?

grafana prometheus

4
推荐指数
1
解决办法
4035
查看次数

prometheus 将一个 NaN 值结果相加为 NaN。如何避免?

我在 prometheus 中有以下指标:它按秒计算 memcached 命令:

sum (irate (memcached_commands_total{instance="memcached-instance"}[5m])) by (command)
Run Code Online (Sandbox Code Playgroud)

结果:

{command="delete"}  0
{command="flush"}   0
{command="get"} 62.733333333333334
{command="incr"}    0
{command="set"} 93.43333333333334
{command="touch"}   NaN
{command="cas"} 0
{command="decr"}    0
Run Code Online (Sandbox Code Playgroud)

我想按秒计算命令(不同命令没有单独的速率)。我尝试了以下公式:

sum (irate (memcached_commands_total{instance="memcached-instance"}[5m]))
Run Code Online (Sandbox Code Playgroud)

但结果是:

{}  NaN
Run Code Online (Sandbox Code Playgroud)

我期望大约 155,但它是 NaN。我想是 command="touch" 罪魁祸首。可以从总和中排除 NaN 吗?

monitoring prometheus

2
推荐指数
1
解决办法
8269
查看次数