小编uml*_*ute的帖子

获取命名的log​​levels列表

在我的应用程序中,我正在使用python.logging日志记录.

现在我想以交互方式控制loglevel,所以我创建了一个组合框,让用户选择" ERROR "," WARN "," INFO ",......

我真的不喜欢的是,目前组合框中的值是硬编码的.相反,Ii想要列出所有"命名"的日志级别(例如,系统默认值,但也包括那些添加的logging.addLevelName;但不是假设生成的日志级别,如" 级别42 ")

到目前为止,我提出的最好的方法是使用logging._levelNames字典.

但后来这似乎是一个私人成员,我不知何故感觉直接访问它.

所以我的问题是:在Python中列出所有当前定义的"命名"日志级别的正确方法是什么.

python logging

7
推荐指数
3
解决办法
1898
查看次数

在Python应用程序中包含第三方依赖项的最佳方法

分发应用程序依赖项的最佳方法是什么?

假设我想发布依赖于的应用程序SqlAlchemy- 是否有一种干净的方式包含SqlAlchemy在我的存储库中而不强迫用户安装它?

python virtualenv python-2.7

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

如何在Linux UVC Driver中启用UVC_QUIRK_FIX_BANDWIDTH怪癖?

我目前正在尝试在Wandboard主板上运行2个网络摄像头,这些主板必须共享USB集线器.问题是,当前的驱动程序实现(仅限YUV)使USB集线器饱和,最后我只能连接一个摄像头.

然而,UVC驱动实现有此怪癖样的情况,等等.

问题是,我没有找到任何关于如何加载这些怪癖的文档.你可以帮助我吗?

linux v4l2 uvc

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

将python-daemon作为非特权用户运行并保留组成员身份

我正在使用python-daemon包在python中编写一个守护进程.守护进程在启动时(init.d)启动,需要访问各种设备.守护进程是在运行ubuntu 的嵌入式系统(beaglebone)上运行的.

现在我的问题是我想将守护进程作为非特权用户运行而不是(例如mydaemon)root.

为了允许守护进程访问设备,我将该用户添加到所需的组中.在我使用的python代码中daemon.DaemonContext(uid=uidofmydamon).

该过程由rootdaemonizes很好地启动,并由正确的用户拥有,但在尝试访问设备时,我获得了权限被拒绝的错误.我写了一个小的测试应用程序,似乎该进程没有继承用户的组成员身份.

#!/usr/bin/python
import logging, daemon, os

if __name__ == '__main__':
  lh=logging.StreamHandler()
  logger = logging.getLogger()
  logger.setLevel(logging.INFO)
  logger.addHandler(lh)

  uid=1001 ## UID of the daemon user
  with daemon.DaemonContext(uid=uid,
                            files_preserve=[lh.stream],
                            stderr=lh.stream):
    logger.warn("UID : %s" % str(os.getuid()))
    logger.warn("groups: %s" % str(os.getgroups()))
Run Code Online (Sandbox Code Playgroud)

当我以uid = 1001的用户运行上面的代码时,我得到类似的东西

$ ./testdaemon.py
UID: 1001
groups: [29,107,1001]
Run Code Online (Sandbox Code Playgroud)

而当我以root(或su)运行上面的代码时,我得到:

$ sudo ./testdaemon.py
UID: 1001
groups: [0]
Run Code Online (Sandbox Code Playgroud)

如何创建由root启动的守护程序进程,但具有不同的有效uid 完整的组成员身份?

python linux ubuntu python-daemon

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

升级或安装自制配方

在我的 CI 设置中,我想确保安装了给定公式的最新版本,无论它是否已经安装。

我目前正在使用类似的东西:

brew update
brew install FORMULA || (brew upgrade FORMULA && brew cleanup FORMULA)
Run Code Online (Sandbox Code Playgroud)

这种方法有什么陷阱?有没有更好的方法来解决这个问题(例如,首先查询 FORMULA 是否已经安装,而不是brew install仅在安装 FORMULA 时才依赖失败)?

homebrew

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

自特定提交以来的 git 浅克隆

我想克隆一个历史悠久的存储库。我只对一些短暂的尚未合并的功能分支和master.

为了不让自己与所有过去的历史和合并的分支混淆,我想从特定的提交 SHA 开始进行浅层克隆。

但是,到目前为止,我只找到了有关如何进行浅层克隆的文档,这些克隆仅包括最后一次n提交 ( --depth) 和自特定日期 ( --shallow-since)以来的提交。

有没有办法指定从给定提交开始的浅克隆?

git shallow-clone

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

用于从视频源(网络摄像头)发出新帧信号的 Gstreamer 消息

我正在尝试使用 gstreamer 将网络摄像头的流保存为一系列图像。到目前为止我已经写了这段代码......

#!/usr/bin/python
import sys, os
import pygtk, gtk, gobject
import pygst
pygst.require("0.10")
import gst

 def __init__(self):
      #.... 
      # Code to create a gtk Window
      #....
      self.player = gst.Pipeline("player")
      source = gst.element_factory_make("v4l2src", "video-source")
      sink = gst.element_factory_make("xvimagesink", "video-output")
      caps = gst.Caps("video/x-raw-yuv, width=640, height=480")
      filter = gst.element_factory_make("capsfilter", "filter")
      filter.set_property("caps", caps)
      self.player.add(source, filter, sink)
      gst.element_link_many(source, filter, sink)
Run Code Online (Sandbox Code Playgroud)

之后,我尝试通过总线创建一个信号来侦听来自源或接收器的任何消息,以指示已发送或接收新帧,以便可以保存它。

      bus = self.player.get_bus()
      bus.add_signal_watch()
      bus.connect("message::any", self.save_file,"Save file")
Run Code Online (Sandbox Code Playgroud)

其中 save_file 是我的回调,我要在其中保存文件。

def save_file(self, bus, msg):
      print  "SAVED A NEW FILE"
Run Code Online (Sandbox Code Playgroud)

我有两个问题,

  1. 我如何调用这个回调。消息::any 不起作用。
  2. 当调用此消息时,如何访问图像缓冲区。

更新(2012 …

python gstreamer v4l2

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

bash:rsync,选项为变量

我正在编写bash脚本,它在某些部分将通过ssh rsync文件.不幸的是,我遇到了将rsync选项保持为变量的问题.请看下面的内容:

    # variables
    directory="/etc"
    backupDirectory="/backup"
    incrementalBackup="/incremental"
    options="-a -e 'ssh -p 10022' -b --backup-dir=$incrementalBackup --delete"
    # rsync
    rsync $options user@server:$directory $backupDirectory
Run Code Online (Sandbox Code Playgroud)

不幸的是,上面的脚本因rsync错误而失败

    Unexpected remote arg: user@server:/etc
    rsync error: syntax or usage error (code 1) at main.c(1201) [sender=3.0.6]
Run Code Online (Sandbox Code Playgroud)

我在脚本调试过程中看到的是,ssh选项('ssh -p 10022')被视为rsync选项.问题是如何正确地将这些额外的ssh设置传递给rsync?提前感谢您提示.

ssh bash rsync

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

使用带模板的dynamic_cast

在C++中实现基于模板的工厂时,我创建了以下allocator函数来实例化给定的子类:

template<class ChildClass, class ParentClass>
ParentClass* allocator() {
   ChildClass *child  = new ChildClass();
   ParentClass*parent = dynamic_cast<ParentClass*>(child);
   if(NULL==parent) {
     delete child;
     return NULL;
   }
   return parent;
}
Run Code Online (Sandbox Code Playgroud)

一切正常,但是当通过静态代码分析工具(如coverity)运行代码时,该delete child;行被标记为逻辑死代码.

我执行运行时检查的原因是断言,即ChildClass派生自ParentClass.

现在我明白了,在模板扩展期间,编译器已经知道是否ChildClass从中派生ParentClass,并且dynamic_cast只在运行时进行评估.

所以运行时检查在逻辑上是死代码,如果ChildClass它确实来自ParentClass(在这种情况下,如果已成功分配,dynamic_cast将始终返回).non-NULLChildClass

有没有办法确保ChildClassParentClass编译时(模板扩展时间)派生出来?

afaik,模板和继承在C++中是无关的,但我可能会遗漏一些明显的东西.

限制

遗憾的是,代码应该在较旧的编译器上编译(例如,C++ - Visual Studio 6附带的实现),它排除了任何较新的扩展,如C++11-features

c++ inheritance templates dynamic-cast

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

AFL警告:最后一条新路径:还没有(奇数,检查语法!)

我有这个警告

(最后一个新路径:还没有(奇数,检查语法!))

在我尝试模糊文件后以红色显示.我不知道它为什么会发生,我用谷歌搜索没有答案.

我的命令如下:

afl-fuzz -i testcases/ -o findings/ tcpdump-4.6.2/tcpdump -nr @@
Run Code Online (Sandbox Code Playgroud)

security fuzzing american-fuzzy-lop

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