我开始学习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.我试图了解如何设计一个公开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) 我在同一台主机上有类似的服务。例如,我有两个名为 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>-mysql0x的host一部分?
作为奖励问题:在同一主机上标记类似服务有最佳实践吗?
我在 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 吗?