小编mat*_*tdm的帖子

用于固定长度FIFO的Python数据类型

我想知道Python中是否存在一个本机数据类型,它的作用类似于固定长度的FIFO缓冲区.例如,我想创建一个使用全零初始化的长度为5的FIFO缓冲区.然后,它可能看起来像这样:

[0,0,0,0,0]

然后,当我在对象上调用put函数时,它将移出最后一个零并将新值(例如1)放入左侧:

[1,0,0,0,0]

如果我放一个2,它会转移并看起来像这样:

[2,1,0,0,0]

...等等.新值出现在前面,最旧值出现偏移.我知道这很容易实现自己,但我想尽可能使用本机python数据类型.有谁知道哪种数据类型最适合这个?

python

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

在构建RPM包之前自动安装构建依赖项

我正在尝试构建一个.rpm包.我刚刚按照步骤来做到这一点.到现在为止所有的步骤都很顺利,但现在我只是坚持这一步.我只是运行以下命令并得到此错误:

rpmbuild -ba asterisk.spec

error: Failed build dependencies: 
    gtk2-devel is needed by asterisk-1.8.12.2-1.fc15.x86_64
    libsrtp-devel is needed by asterisk-1.8.12.2-1.fc15.x86_64
    [... more ...]
    freetds-devel is needed by asterisk-1.8.12.2-1.fc15.x86_64
    uw-imap-devel is needed by asterisk-1.8.12.2-1.fc15.x86_64
Run Code Online (Sandbox Code Playgroud)

我正在使用fedora-15.如何解决此错误?

如何在安装src.rpm包时安装所有依赖项.可能吗?

fedora rpmbuild

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

如何作为系统服务运行时将输出管道传输到文件?

在将程序作为systemd服务运行时,我无法将STDOUT和STDERR传送到文件.我已经尝试将以下内容添加到.service文件中:

ExecStart=/apppath/appname > /filepath/filename 2>&1
Run Code Online (Sandbox Code Playgroud)

但这不起作用.输出结果在/ var/log/messages中,可以使用journalctl查看,但我想要一个单独的文件.

我也试过设置,StdOutput=tty但找不到将其重定向到文件的方法.

任何帮助,将不胜感激.

linux stdout fedora stderr systemd

32
推荐指数
2
解决办法
3万
查看次数

如何从Python的Counter类中获得加权随机选择?

我有一个程序,我保持的各种成功的轨迹东西使用collections.Counter-的每个成功的事情递增相应的计数器:

import collections
scoreboard = collections.Counter()

if test(thing):
    scoreboard[thing]+ = 1
Run Code Online (Sandbox Code Playgroud)

然后,为了将来的测试,我想倾向于取得最大成功的事情.Counter.elements()似乎是理想的,因为它返回的元素(以任意顺序)重复多次等于计数.所以我想我可以做到:

import random
nextthing=random.choice(scoreboard.elements())
Run Code Online (Sandbox Code Playgroud)

但是,不会引发TypeError:'itertools.chain'类型的对象没有len().好的,所以random.choice无法使用迭代器.但是,在这种情况下,长度是已知的(或可知的) - 它是sum(scoreboard.values()).

我知道迭代未知长度列表并随机选择元素的基本算法,但我怀疑有更优雅的东西.我该怎么办?

python random counter iterator weighted

12
推荐指数
2
解决办法
1354
查看次数

了解ZMODEM协议

我需要在我的程序中包含基本的文件发送和文件接收例程,它需要通过ZMODEM协议.问题是我无法理解规范.

作为参考,这是规范.

规范没有定义各种常量,所以这里是来自Google的头文件.

在我看来,在该文档中有许多重要的事情未定义:

  • 它经常引用ZDLE编码,但它是什么?我什么时候使用它,什么时候不使用它?
  • 在ZFILE数据帧之后,传输文件的元数据(文件名,修改日期,大小等).接下来是ZCRCW块,然后是根据规范未定义类型的块.据称ZCRCW块包含一个16位CRC,但规范没有定义CRC计算的数据.
  • 它没有定义它使用的CRC多项式.我偶然发现CRC32 poly是标准的CRC32,但我对CRC16 poly没有这么好的运气.没关系,我通过反复试验找到了它.CRC16多晶硅是0x1021.

我环顾四周寻找参考代码,但我能找到的是从90年代早期开始的无法读取的无证件C文件.我也从MSDN中找到了这组文件,但它与我运行的测试有点模糊和矛盾:http://msdn.microsoft.com/en-us/library/ms817878.aspx(你可能需要通过谷歌的缓存查看)

为了说明我的困难,这是一个简单的例子.我在服务器上创建了一个包含"Hello world!"的纯文本文件,它名为helloworld.txt.

我使用以下命令从服务器启动传输:

sx --zmodem helloworld.txt
Run Code Online (Sandbox Code Playgroud)

这会提示服务器发送以下ZRQINIT帧:

2A 2A 18 42 30 30 30 30 30 30 30 30 30 30 30 30   **.B000000000000
30 30 0D 8A 11                                    00.Š.
Run Code Online (Sandbox Code Playgroud)

这有三个问题:

  • 填充字节(0x2A)是否是任意的?为什么这里有两个,但在其他情况下只有一个,有时没有?
  • 该规范最后没有提到[CR] [LF] [XON],但是MSDN文章的确如此.为什么会这样?
  • 为什么[LF]设置了位0x80?

在此之后,客户端需要发送ZRINIT帧.我从MSDN文章中得到了这个:

2A 2A 18 42 30 31 30 30 30 30 30 30 32 33 62 65   **.B0100000023be
35 30 0D …
Run Code Online (Sandbox Code Playgroud)

protocols zmodem

11
推荐指数
2
解决办法
9003
查看次数

如何通过比较两张照片来计算相机位置?

我正在尝试计算图像的相机位置.我有2个rubiks立方体的图像.第一个图像被认为是基本图像,下一个图像是相机移动后的图像.因此,对于第一张图像,我假设相机位于(0,0,0).在这张图片上,我然后识别出rubiks立方体正面的4个角(如图所示)(由4个蓝色圆圈标识的4个角). 在此输入图像描述

然后对于下一个图像(在相机移动之后),我识别出rubiks立方体的相同面,如此处所示 在此输入图像描述

因此,假设第一个图像作为基本图像,是否有人知道我是否可以计算相机移动了多少图像2,如下所示: 在此输入图像描述

computer-vision

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

如何将浮点数剪辑到略低于限制?

函数类似于numpy.random.uniform()返回两个边界之间的浮点值,包括第一个边界但不包括顶部边界.也就是说,numpy.random.uniform(0,1)可能会产生0但永远不会产生1.

我正在使用这样的数字并使用有时返回范围之外的结果的函数处理它们.我可以使用numpy.clip()将范围之外的值切换回0-1,但不幸的是,该限制包含顶部数字.

如何在python中指定"无限小于1的数字"?

python floating-point numpy clipping

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