小编bli*_*ile的帖子

Python日志记录 - 禁用导入模块的日志记录

我正在使用Python日志记录模块,并且想要禁用由我导入的第三方模块打印的日志消息.例如,我正在使用以下内容:

logger = logging.getLogger()
logger.setLevel(level=logging.DEBUG)
fh = logging.StreamHandler()
fh_formatter = logging.Formatter('%(asctime)s %(levelname)s %(lineno)d:%(filename)s(%(process)d) - %(message)s')
fh.setFormatter(fh_formatter)
logger.addHandler(fh)
Run Code Online (Sandbox Code Playgroud)

这会在我执行logger.debug("我的消息!")时打印出我的调试消息,但它也会打印出我导入的任何模块的调试消息(例如请求和许多其他事情).

我想只看到我感兴趣的模块的日志消息.是否可以使日志模块执行此操作?

理想情况下,我希望能够告诉记录器从"ModuleX,ModuleY"打印消息并忽略所有其他消息.

我查看了以下内容,但我不想在每次调用导入函数之前禁用/启用日志记录: logging - 如何忽略导入的模块日志?

python logging

61
推荐指数
8
解决办法
3万
查看次数

睡眠过程的CPU利用率很高

我有一个似乎陷入僵局的进程:

# strace -p 5075
Process 5075 attached - interrupt to quit
futex(0x419cf9d0, FUTEX_WAIT, 5095, NULL
Run Code Online (Sandbox Code Playgroud)

它坐在"futex"系统调用上,似乎无限期地等待锁定.运行"top"时,显示该进程消耗大量CPU:

# top -b -n 1
top - 23:13:18 up 113 days,  4:19,  1 user,  load average: 1.69, 1.74, 1.72
Tasks: 269 total,   1 running, 268 sleeping,   0 stopped,   0 zombie
Cpu(s):  8.1%us,  0.1%sy,  0.0%ni, 91.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  12165696k total,  3810476k used,  8355220k free,    29440k buffers
Swap:  8388600k total,    43312k used,  8345288k free,   879988k cached

PID USER      PR  NI  VIRT  RES …
Run Code Online (Sandbox Code Playgroud)

linux cpu deadlock sleep process

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

Python和RabbitMQ - 从多个渠道收听消费事件的最佳方式?

我有两个独立的RabbitMQ实例.我正试图找到听取两者事件的最佳方式.

例如,我可以使用以下内容在一个上使用事件:

credentials = pika.PlainCredentials(user, pass)
connection = pika.BlockingConnection(pika.ConnectionParameters(host="host1", credentials=credentials))
channel = connection.channel()
result = channel.queue_declare(Exclusive=True)
self.channel.queue_bind(exchange="my-exchange", result.method.queue, routing_key='*.*.*.*.*')
channel.basic_consume(callback_func, result.method.queue, no_ack=True)
self.channel.start_consuming()
Run Code Online (Sandbox Code Playgroud)

我有第二个主持人,"host2",我也想听.我想创建两个单独的线程来做到这一点,但从我读过的,pika不是线程安全的.有没有更好的办法?或者创建两个单独的线程,每个线程监听不同的Rabbit实例(host1和host2)就足够了?

python rabbitmq pika

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

AngularJS,ng-click vs ng:点击vs ngClick

我正在学习AngularJS,我对我遇到的指令的不同用法感到有些困惑.

例如,有时我会看到类似(ng 冒号点击)的内容:

<tr ng:click="..." ...>
Run Code Online (Sandbox Code Playgroud)

有时我看到(ng dash click):

<tr ng-click="..." ...>
Run Code Online (Sandbox Code Playgroud)

在Angular文档中,指令显示为" ngClick "(没有破折号或冒号的camelcase).另外,在某些地方,我见过:data-ng-click

这些不同形式之间有什么区别?

angularjs

9
推荐指数
1
解决办法
3279
查看次数

具有aioamqp的异步RabbitMQ使用者

我正在尝试使用asyncio/aioamqp编写异步使用者.我的问题是,回调协程(下面)是阻塞的.我将通道设置为执行basic_consume(),并将回调分配为callback().回调有一个"来自asyncio.sleep的产生"语句(模拟"工作"),它从发布者获取一个整数,并在打印消息之前休眠一段时间.

如果我发布了两条消息,一条时间为"10",紧接着一条时间为"1",我预计第二条消息将首先打印,因为它的睡眠时间较短.相反,回调阻止10秒,打印第一条消息,然后打印第二条消息.

似乎basic_consume或回调在某处阻塞.还有另外一种方法可以处理吗?

@asyncio.coroutine
def callback(body, envelope, properties):
    yield from asyncio.sleep(int(body))
    print("consumer {} recved {} ({})".format(envelope.consumer_tag, body, envelope.delivery_tag))

@asyncio.coroutine
def receive_log():
    try:
        transport, protocol = yield from aioamqp.connect('localhost', 5672, login="login", password="password")
    except:
        print("closed connections")
        return

    channel = yield from protocol.channel()
    exchange_name = 'cloudstack-events'
    exchange_name = 'test-async-exchange'
    queue_name = 'async-queue-%s' % random.randint(0, 10000)
    yield from channel.exchange(exchange_name, 'topic', auto_delete=True, passive=False, durable=False)
    yield from asyncio.wait_for(channel.queue(queue_name, durable=False, auto_delete=True), timeout=10)

    binding_keys = ['mykey']

    for binding_key in binding_keys:
        print("binding", binding_key)
        yield from asyncio.wait_for(channel.queue_bind(exchange_name=exchange_name,
                                                       queue_name=queue_name,
                                                       routing_key=binding_key), timeout=10) …
Run Code Online (Sandbox Code Playgroud)

python asynchronous rabbitmq python-asyncio

8
推荐指数
1
解决办法
2914
查看次数

运行Python脚本后终端搞砸了(不显示新行)

我有一个Python脚本,用于使用Python子进程模块跨多个主机并行执行命令.它包装了SSH,基本上就这样调用:

output = subprocess.Popen(["/bin/env", env, "/usr/bin/ssh", "-t", "%s@%s" % (user, host), "--", command], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
Run Code Online (Sandbox Code Playgroud)

有效命令执行如下:

/bin/env TERM=$TERM:password /usr/bin/ssh -t "%s@%s" % (user, host), "--", command
Run Code Online (Sandbox Code Playgroud)

它工作正常,除了我得到一个间歇性错误,我的终端在运行脚本后搞砸了(丢失换行符).从命令行"重置"修复它,但我不确定这是怎么回事.我注意到有时在元组输出的第一项结尾处有一个"\ r \n",有时它不在那里.请参阅以下内容,特别是" Permission denied\r \n":

**** Okay output ****
[user@/home/user]# ./command.py hosts.lists "grep root /etc/shadow"
Running command "grep root /etc/shadow" on hosts in file "hosts.test"
('grep: /etc/shadow: Permission denied\r\n', 'Connection to server1.example.com closed.\r\n')
('grep: /etc/shadow: Permission denied\r\n', 'Connection to server2.example.com closed.\r\n')
[user@/home/user]#


**** Output causes terminal to not display newlines …
Run Code Online (Sandbox Code Playgroud)

python terminal subprocess tty stty

7
推荐指数
2
解决办法
2440
查看次数

"docker start"和"docker restart"之间有什么区别?

因为它与停止/启动容器有关?

停止容器后:

docker stop <container id>
Run Code Online (Sandbox Code Playgroud)

似乎我可以运行"开始"或"重新启动"来恢复它.我想知道是否存在任何差异,或者它们是否在功能上相同:

docker restart <container id>
docker start <container id>
Run Code Online (Sandbox Code Playgroud)

containers docker

7
推荐指数
1
解决办法
3587
查看次数

Python,如何从实例方法“自动”调用函数/方法?

有没有办法强制Python中的实例方法在执行之前调用另一个方法?

一个简单的例子进行演示:

class MyClass(object):
  def __init__(self):
    pass
  def initialize(self):
    print "I'm doing some initialization"
  def myfunc(self):
    print "This is myfunc()!"
Run Code Online (Sandbox Code Playgroud)

我想要某种方法让 myfunc() 在运行之前自动调用initialize()。如果我做:

obj = MyClass()
obj.myfunc()
Run Code Online (Sandbox Code Playgroud)

我希望看到以下输出:

I'm doing some initialization 
This is myfunc()!
Run Code Online (Sandbox Code Playgroud)

无需在 myfunc() 中显式调用initialize()。

这样做的原因是,如果我有许多“myfunc”实例,例如 myfunc1、myfunc2、myfunc3,所有这些实例都需要调用“initialize”,我宁愿让它们全部在同一位置调用一次初始化,而不是手动调用每次调用该方法。这是元类可以做的事情吗?

python metaclass class

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

续订时 AWS 托管证书的 ARN 是否会更改?

我有一个简单的问题,但我很难找到答案。

使用 AWS Certificate Manager 时,续订证书时证书 ARN 是否会更改?

一些背景:

我有一个 Cloudformation 模板,用于创建自动缩放组 + ELB。我将 IAM 证书用于 HTTPS。这很痛苦,因为当证书过期时,需要更改模板中的 ARN 以指向新证书。

我的理解是,如果我切换到 AWS Certificate Manager,我可以在模板中使用 ACM 证书 ARN,然后可以在幕后替换/续订证书,而无需更改模板中的 ARN。我本质上是从根本的变化中抽象出来的。

这是一个正确的假设吗?

ssl-certificate amazon-web-services amazon-elb aws-cloudformation

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

期望脚本没有正确发送新行

我正在使用 expect 来响应网络服务。但是,我在 Wireshark 中注意到,当我执行以下操作时:

send "mystring\r\n"
Run Code Online (Sandbox Code Playgroud)

它在电线上被翻译成:

"我的字符串\n"

我试过设置stty raw,以及各种组合\r\n以及从内预计发送ASCII码。Expect 似乎将这些组合中的任何一个转换为\n. 问题是服务器似乎需要一个\r\n才能接受输入。我已经能够确定这一点,因为当我在 expect 中使用“interact”,然后^M从 shell 中键入 a (control-v enter) 时,Wireshark 会看到一串:

"我的字符串\r\n"

通过线路发送,服务器正确处理输入。有没有办法在没有翻译的情况下通过expect正确发送这个组合?

keyboard shell newline expect

3
推荐指数
1
解决办法
5277
查看次数