我正在使用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 - 如何忽略导入的模块日志?
我有一个似乎陷入僵局的进程:
# 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) 我有两个独立的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)就足够了?
我正在学习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
这些不同形式之间有什么区别?
我正在尝试使用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脚本,用于使用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) 因为它与停止/启动容器有关?
停止容器后:
docker stop <container id>
Run Code Online (Sandbox Code Playgroud)
似乎我可以运行"开始"或"重新启动"来恢复它.我想知道是否存在任何差异,或者它们是否在功能上相同:
docker restart <container id>
docker start <container id>
Run Code Online (Sandbox Code Playgroud) 有没有办法强制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”,我宁愿让它们全部在同一位置调用一次初始化,而不是手动调用每次调用该方法。这是元类可以做的事情吗?
我有一个简单的问题,但我很难找到答案。
使用 AWS Certificate Manager 时,续订证书时证书 ARN 是否会更改?
一些背景:
我有一个 Cloudformation 模板,用于创建自动缩放组 + ELB。我将 IAM 证书用于 HTTPS。这很痛苦,因为当证书过期时,需要更改模板中的 ARN 以指向新证书。
我的理解是,如果我切换到 AWS Certificate Manager,我可以在模板中使用 ACM 证书 ARN,然后可以在幕后替换/续订证书,而无需更改模板中的 ARN。我本质上是从根本的变化中抽象出来的。
这是一个正确的假设吗?
ssl-certificate amazon-web-services amazon-elb aws-cloudformation
我正在使用 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正确发送这个组合?