我正在使用 python 开发一个项目,我需要帮助记录日志部分。我的记录器有两个处理程序(系统日志和文件日志),并将日志发送给它们。有时我只需要发送日志中的一个。如何选择要使用的处理程序?感谢帮助...
global my_Sysloghandler
global my_logger, my_log_handler
my_Sysloghandler=logging.handlers.SysLogHandler()
my_log_handler= logging.FileHandler('/var/log/{0}.log'.format(__project__))
my_log_handler.setFormatter(logging.Formatter('%(asctime)s %(message)s'))
my_log_handler.setLevel(level)
my_logger= logging.getLogger('my_logger')
my_logger.addHandler(my_log_handler)
my_logger.addHandler(my_Sysloghandler)
my_logger.debug('This log is sent to both handler but I want to send it only my_logger')
Run Code Online (Sandbox Code Playgroud) 如何在 C 中编写 svc 处理程序以调用 SMC(监控模式)指令以切换到 arm cortex a9 的监控模式?即从主管模式到监控模式都需要在 svc 处理程序中完成什么,如何在 C 中编写相同的内容。感谢详细答案...
我正在尝试实现从不同线程监听同一个Looper的Handler.
下面我有两个处理程序,一个在主线程中创建,另一个在子线程中,但是两个都初始化为侦听Main Looper.
private Handler mMain;
public static final ThreadPoolExecutor tpe =
(ThreadPoolExecutor) Executors.newCachedThreadPool();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mMain = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
Log.wtf("", "main:" + msg);
}
};
tpe.execute(new Runnable() {
private Handler tChild = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
Log.wtf("", "child:" + msg);
}
};
@Override
public void run() {
Log.wtf("", "send msg to main looper");
tChild.sendEmptyMessage(100);
}
});
}
Run Code Online (Sandbox Code Playgroud)
但是当我发送如下消息时,只有子处理程序打印消息.主处理程序不接收消息.
03-20 22:02:26.754: A/(12857): …Run Code Online (Sandbox Code Playgroud) 我想问一个问题,但我会先展示我的文件
<html>
<body>
<a href="cloudje:firefox">Open firefox</a>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我的 .desktop 文件:
[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
Terminal=false
Exec=/usr/bin/cloudjerun -c gedit
Name[en_US]=Gedit
Comment[en_US]=Small, easy-to-use program to access iTunesU media
Name=TunesViewer
Comment=Small, easy-to-use program to access iTunesU media
Icon=/usr/share/icons/hicolor/scalable/apps/tunesview.svg
Categories=Application;Network;
MimeType=x-scheme-handler/cloudje;
Comment[en_US.utf8]=Small, easy-to-use program to access iTunesU media
Run Code Online (Sandbox Code Playgroud)
教程:http : //jarrpa.net/2011/10/28/creating-custom-url-handlers-in-ubuntu-11-04-11-10-gnome-3-0/
好的,这很酷。.desktop 文件将放置在 /usr/share/applications 中。如果您执行命令“xdg-open cloudje:firefox”或类似“xdg-open cloudje:example”的命令,它将始终使用名为“cloudjerun”的 Python 脚本执行 gedit。如何使用命令“xdg-open cloudje:firefox”执行firefox?
我是否需要将 'Exec=/usr/bin/cloudjerun -c gedit' 替换为 'Exec=/usr/bin/cloudjerun -c %U' 或 'Exec=/usr/bin/cloudjerun -c %s' 或其他内容?
在开发eclipse插件时,我在带有id crtc_v4.session的Manifest扩展中使用默认处理程序crtc_v4.handlers.StartSession创建了一个命令,我在清单中为此命令添加了一个处理程序,此处理程序根据变量crtc_v4.sessionvar启用命令.
控制台上出现的问题是:
!MESSAGE Conflicting handlers for crtc_v4.session: {crtc_v4.handlers.StartSession@98bc5c} vs {crtc_v4.handlers.StartSession@1265d09}
Run Code Online (Sandbox Code Playgroud)
但它不会阻止运行插件.我问的是这个问题的解决方案,以及它是否会影响我的插件的性能?
编辑:
定义命令的代码段:
<extension
point="org.eclipse.ui.menus">
<menuContribution
allPopups="false"
locationURI="toolbar:org.eclipse.ui.main.toolbar">
<toolbar
id="crtc_v5.crtctoolbar">
<command
commandId="crtc_v5.session"
icon="icons/neutral.png"
label="Start Session"
style="push">
</command>
</toolbar>
</menuContribution>
Run Code Online (Sandbox Code Playgroud)
定义处理程序的代码段:
</extension>
<command
defaultHandler="crtc_v5.handlers.StartSession"
id="crtc_v5.session"
name="session">
</command>
</extension>
Run Code Online (Sandbox Code Playgroud)
这是对sessionvar的启用:
<extension
point="org.eclipse.ui.handlers">
<handler
class="crtc_v5.handlers.StartSession"
commandId="crtc_v5.session">
<enabledWhen>
<with
variable="crtc_v5.sessionvar">
<equals
value="LOGGEDIN">
</equals>
</with>
</enabledWhen>
</handler>
Run Code Online (Sandbox Code Playgroud)
当我查找Handler.obtainMessage()的功能时,我读到它从全局消息池中检索消息,而不是创建消息的新实例。此全局消息池位于何处?
它是之前创建的所有消息对象的集合吗?
因此,关于如何在 Android 上进行延迟有多个类似的问题/答案。然而,他们主要专注于在 UI 线程上执行此操作。如果我需要延迟服务中的工作线程(并且我不想让线程进入睡眠状态)怎么办?Handler.postDelayed() 不起作用,因为存在“无法在线程内创建处理程序没有调用 Looper.prepare()”异常。CountDownTimer 出于同样的原因不起作用。而且我没有任何意见可以调用 runOnUiThread()。那么是在我拥有的每个线程上都有一个循环器的唯一解决方案还是有另一种方法可以做到这一点?
更新:这很愚蠢,但我在我自己的旧代码中找到了对我有用的答案:)。基本上,如果您想从非 UI 线程延迟启动 Runnable,您需要做的就是让主循环程序处理这个问题。
Handler handler = new Handler(Looper.getMainLooper());
Runnable r = new Runnable() {
@Override
public void run() {
// Do stuff to be run after a delay
// CAUTION: this won't be run on the same thread
}
};
handler.postDelayed(r, DELAY_TIME);
Run Code Online (Sandbox Code Playgroud)
缺点可能是该 Runnable 中的代码不会与原始代码在同一线程上运行。这就是为什么我不把这种方法作为被接受的答案(我承认,最初的问题听起来像是我希望在同一个非 UI 线程上发生一个定时事件。为此我还没有答案除了 Emmanuel 的那个,我必须在我的线程上附加一个 Looper)。然而,出于我的目的,这有效,因为我只需要在超时时启动服务。
我正在开发适用于 Android 的屏幕过滤器应用程序(如 f.lux)。我目前正在使用该功能在太阳落山时逐渐淡入过滤器。屏幕关闭时状态无关紧要,但是当屏幕打开时,淡入淡出进度正确(或立即更新)很重要。
AlarmManager.setInexactRepeating,这被认为是最节能的警报,除了:您的警报的第一次触发不会在请求的时间之前,但在该时间之后几乎整个间隔内都不会发生。
我认为这意味着第一触发器将必然在第一时间间隔内发生,这意味着该装置将被唤醒,造成不必要的电池消耗。
AlarmManager.set用来安排第一个闹钟。当它熄灭时,我可以更新屏幕,然后安排下一个闹钟。这会起作用,但会在每次闹钟时唤醒旧设备(没有打瞌睡),而不是等到屏幕打开。它还使用 AlarmManger 作为计时器,文档明确建议反对:对于计时操作(滴答、超时等),使用 Handler 更容易也更高效。
可以,然后呢,
Handler,它会定期更新 UI。但是等等:这依赖于postDelayed,它说(强调我的):在深度睡眠中花费的时间会增加执行的额外延迟。
我认为这意味着,当设备从睡眠中唤醒时,下一次更新可能不会在整个间隔内发生。我读对了吗?强迫用户在下一次更新之前等待一两分钟是一个交易破坏者。
CountDownTimer和ValueAnimator在他们的实现中都使用了这个方法,所以如果我对 Handler 的解释是正确的,那么他们都出局了。
我可以使用基于处理程序的方法,并在屏幕关闭时接收事件,此时我会取消现有动画,然后开始一个新动画。这看起来是最好的解决方案,但似乎应该有一种更简单的方法来做到这一点。
关于这个主题还有很多其他的 SO 问题。每个人和他们的母亲都建议使用 Handler,但是除了上面的引用之外,绝对没有关于设备进入睡眠状态时它的行为方式的信息。(显然)没有其他人遇到过这个问题真的很奇怪——我是在做一些非常不寻常的事情,还是遗漏了一些基本的东西?
任何人都可以提供有关Handler.postDelayed设备进入睡眠状态时的真实行为的见解,并建议我在这种特定情况下应该做什么吗?
我有我可以使用命令获得的所有计划作业的列表
延迟::工作.all
每个作业都有一个处理程序字段(字符串),其中包含一个“-”分隔的参数。我想找到这个字符串的参数之一。一种方法显然是拆分字符串并提取值,但如果传递的参数列表发生任何更改,则此方法将失败。
下面给出的是我的工作对象之一的处理程序字符串:
"--- !ruby/object:ActiveJob::QueueAdapters::DelayedJobAdapter::JobWrapper\njob_data:\n job_class: ActionMailer::DeliveryJob\n job_id: 7ce42882-de24-439a-a52a-5681453f4213\n mailers\n参数:\n - 事件通知\n - 提醒_网络研讨会_事件_注册\n - 交付_现在\n - mail@gmail.com\n - yesha\n - 89\n 语言环境::en\n"
我想知道是否有任何方法,我可以在保存作业对象的同时向作业对象发送额外的参数,以便稍后使用,而不是在处理程序字符串中进行搜索。或者,如果不是这样,我可以获得处理程序的参数列表,而不是解析字符串并使用它。
请帮助!
所以我问这个问题是因为在通过 Python 库、谷歌和 Stack Exchange 运行搜索时,我似乎找不到一个简单的措辞答案。
到目前为止我能找到的最好的是来自 wptserve:
“处理程序是具有通用签名的函数:
handler(request, response)
Run Code Online (Sandbox Code Playgroud)
预计处理程序将使用来自请求的信息(例如路径)来使用要发送的数据填充响应对象,或者通过与请求关联的 ResponseWriter 实例直接写入输出流。”
链接:https : //wptserve.readthedocs.io/en/latest/handlers.html
所以基本上,从我收集的信息来看,处理程序通过使用数据来响应用户请求,数据类型取决于请求的类型。
我相信它比那更复杂一点,但同样,真正需要的是一个非常简单的措辞,对处理程序是什么的概念性描述,没有花哨的术语。
handler ×10
android ×4
python ×2
alarmmanager ×1
android-doze ×1
arguments ×1
arm ×1
c ×1
delayed-job ×1
eclipse-rcp ×1
linux ×1
logging ×1
looper ×1
manifest ×1
message ×1
protocols ×1
python-3.x ×1
timer ×1
trustzone ×1
ubuntu ×1
url ×1