Linux dbus命令行套件

D-Bus是Linux使用的进程间通信机制,允许各个进程互相访问,而不需要为每个其他组件实现自定义代码。即使对于系统管理员来说,这也是一个相当深奥的主题,但它确实有助于解释linux的另一部分是如何工作的。 这里主要介绍 dbus-send 与 GDbus cli工具,其他的还有QtDbus , d-feet… 命令行工具dbus-send ,是freedesktoop提供的dbus包配套的命令客户端工具,可用于发送dbus消息。 GDbus GLib实现的dbus工具。较与 dbus-send,拥有更完整的功能。 d-feet: 可以处理所有D-Bus服务的GUI应用程序。 dbus-send dbus有两种消息总线 (message bus):system bus 和 session bus,通过使用 --system和 --session 选项来通过dbus-send 向系统总线或会话总线发送消息。如果两者都未指定,默认为**session bus*. 借此,顺道聊下 system bus 和 session bus: System Bus: 在桌面上,为所有用户提供一条总线. 专用于系统服务。 有关于低级时间,例如 网络连接,USB设备。 在嵌入式Linux系统中,system bus是唯一D-Bus类型。 Session Bus: 每个用户会话一个实例 为用户应用提供那个桌面服务。 连接到 X-session 参数选项 参数 说明 --dest=NAME 这个是必选的参数,指定要接收消息的接口名称。例如 org.freedesktop.ExampleName --print-reply 打印回复消息 --print-reply=literal 如选项一样,打印回复正文。如有特殊字符,如对象或 object 则按字面打印,没有标点符号、转义字符等。 --reply-timeout= 可选参数,等待回复的超时时长,单位为 毫秒。 --system --session --type=method_call signal 必须始终指定要发送的消息的对象路径和名称。以下参数(如果有)是消息内容(消息参数)。这些值作为类型指定的值给出,可能包括如下所述的容器(数组、dict和变体)。 支持参数 dbus-send 发送的消息,在调用方法需要传参数时,必须将这些值给出。dbus-send 支持传入的参数的类型,并不为D-Bus支持的所有的数据类型,仅为一些简单的类型:如...

 ·  · 

python drf之viewset

What is Views drf提供了两个基类,五个视图扩展类,9个视图集 drf提供了一个Django中view的子类APIView ,主要变动大概为以下: 重新封装了Request 与 Response实例。 使用了独有的Request与Response对象,并且提供了专有的解析器 Parser 可以根据HTTP Content-Type 指明的请求数据进行解析。 增加了自有的鉴权/节流 在django中dispatch() 分发前,会对请求进行身份认证、权限检查、流量控制。 异常捕获 APIException。 APIView implement python 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 @classmethod def as_view(cls, **initkwargs): .... # 调用父类的方法,Python 3 可以使用直接使用 super().xxx 代替 super(Class, self).xxx view = super(APIView, cls).as_view(**initkwargs) view.cls = cls # 并且生成一个新的request view.initkwargs = initkwargs # Note: session based authentication is explicitly CSRF validated, # all other authentication is CSRF exempt....

 ·  · 

python drf之Serializer

What is serializers? serializers主要作用是将原生的Python数据类型(如 model querysets )转换为web中通用的JSON,XML或其他内容类型。 DRF 提供了一个Serializer类,它为您提供了种强大的通用方法来控制响应的输出,以及一个ModelSerializer 类,它为创建处理 model instance 和 serializers 提供了一个序列化的快捷方式。 Reference drf serializers manual How to Declaring Serializers? 序列化一个django model python 1 2 3 4 5 6 7 class Comment: def __init__(self, email, content, created=None): self.email = email self.content = content self.created = created or datetime.now() comment = Comment(email='leila@example.com', content='foo bar') 声明Serializers,可以用来序列化与反序列化对象 Comment的属性及值。 python 1 2 3 4 5 6 from rest_framework import serializers class CommentSerializer(serializers....

 ·  · 

python django使用

路由匹配 django中默认匹配页 text 1 url(r'^$', views.login), django中404匹配 text 1 url(r'^$', views.login), # 需要放置最后,不过一般不推荐,都是通过异常捕获处理 named group 名称组 https://docs.djangoproject.com/en/1.11/topics/http/urls/#named-groups text 1 url(r'^test[0-9]{4}',views.login) 反向解析 别名不能出现冲突 text 1 2 from django.shortcuts import reverse reverse(xxx) 名称组反向解析 无名分组 python 1 2 3 4 5 6 # 路由部分 url(r'^index/(\d+)/', views.home, name='xxx') # 前端 <a href="{% url 'id' obj.id %}" class="btn btn-primary btn-xs">remove</a>s # 后端 print reverse('id', args=(id,)) 有名称分组 python 1 2 3 4 5 6 7 8 # 路由部分 url(r"^userdel/(?...

 ·  · 

由PIPE size 引起的线上故障

sence:python中使用subprocess.Popen(cmd, stdout=sys.STDOUT, stderr=sys.STDERR, shell=True) ,stdout, stderr 为None. 在错误中执行是无法捕获 stderr的内容,后面将上面的改为 subprocess.Popen(cmd, stdout=PIPE, stderr=PIPE, shell=True),发现是可以拿到 stderr, 但是会遇到大量任务hanging,造成线上事故。 为此特意查询subprocess的一些参数的说明。 stdin stdout stderr 如果这些参数为 PIPE, 此时会为一个文件句柄,而传入其他(例如 sys.stdout 、None 等)的则为None 正如这里介绍的一样,subprocess 。 而使用 PIPE,却导致程序 hanging。一般来说不推荐使用 stdout=PIPE stderr=PIPE,这样会导致一个死锁,子进程会将输入的内容输入到 pipe,直到操作系统从buffer中读取出输入的内容。 查询手册可以看到确实是这个问题 Refernce Warning This will deadlock when using stdout=PIPE and/or stderr=PIPE and the child process generates enough output to a pipe such that it blocks waiting for the OS pipe buffer to accept more data. Use communicate() to avoid that....

 ·  ·