小编mmi*_*ate的帖子

从Python将键盘插入Linux控制台

我最近遇到了一个相当奇怪的任务,一个结果是必须能够使用DTMF(又名"Touch Tone")音调来控制非X Linux计算机的终端.计算机有一个调制解调器,可以通过ALSA访问,因此sox"rec"程序,这是我正在读取输入.有问题的计算机完全隔离,没有任何以太网或其他网络接口.我正在使用的Goertzel算法实现效果非常好,eSpeak语音合成引擎也是唯一的输出源; 这适用于任何Touch Tone手机.它读回两个输入(输入是八进制数字,一次一个ASCII字节)和dashshell反馈的任何内容 - 提示,命令输出等,使用ASCII助记符作为控制字符.

我用来与之交互的当前方法dash和通过它启动的程序是pexpect模块.但是,我需要它能够按需读回光标所在行的全部内容,而且我不记得pexpect能够这样做(如果是,我不知道.).我能想到的唯一其他解决方案是以某种方式使用Python来控制或充当键盘和控制台驱动程序.

这确实是唯一可行的方法(如果是这样,甚至可以用Python吗?),还是有另一种直接访问控制台内容的方法?

编辑:通过愚蠢的运气,我刚刚发现PExpect的SVN版本有pexpect.screen.但是,它没有任何实际运行程序的方法.我必须密切关注它的发展.

python linux keyboard console dtmf

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

自动生成的 Python 构造函数

我有无数来自 SQLAlchemy 的各种项目的 Python 类(还有一些来自 Pygame 的项目),我最近注意到其中许多项目中的一个模式:它们的构造函数总是这样:

class Foo(Base):
    def __init__(self, first, last, email, mi=""):
        self.first = first
        self.last = last
        self.email = email
        self.mi = mi
Run Code Online (Sandbox Code Playgroud)

...由此构造函数所做的唯一一件事就是将一组位置参数传输到一组完全相同命名的数据成员中,不执行任何计算或其他函数调用。

在我看来,这种重复是不必要的,并且在更改时容易出现人为错误。

这让我想到了一个问题:是否可以自动生成这样的__init__(self, ...)函数,最好不要乱用 CPython 字节码或使用模板/宏来改变源文件本身?

python constructor code-generation data-members

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

LPeg语法奇怪

我的Lua应用程序的一部分是一个搜索栏,我试图让它理解布尔表达式.我正在使用LPeg,但是当前的语法给出了一个奇怪的结果:

> re, yajl = require're', require'yajl'
> querypattern = re.compile[=[
    QUERY       <- ( EXPR / TERM )? S? !. -> {}
    EXPR        <- S? TERM ( (S OPERATOR)? S TERM )+ -> {}
    TERM        <- KEYWORD / ( "(" S? EXPR S? ")" ) -> {}
    KEYWORD     <- ( WORD {":"} )? ( WORD / STRING )
    WORD        <- {[A-Za-z][A-Za-z0-9]*}
    OPERATOR    <- {("AND" / "XOR" / "NOR" / "OR")}
    STRING      <- ('"' {[^"]*} '"' / "'" {[^']*} "'") -> …
Run Code Online (Sandbox Code Playgroud)

lua parsing boolean-expression peg lpeg

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

从lambda分配给Python列表的切片

我知道各种对象的某些"特殊"方法表示通常用运算符执行的操作(即int.__add__+,object.__eq__for ==等),其中一个是list.__setitem,它可以为一个值赋值列表元素.但是,我需要一个可以将列表分配到另一个列表的切片的函数.

基本上,我正在寻找相当于的表达式some_list[2:4] = [2, 3].

python lambda list variable-assignment

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

如何随机选择格式字符串

有时,程序可以通过多种方式将包含动态值的消息短语发送给其用户.例如:

  • "剩下{}分钟."
  • "你需要在不到{}分钟内完成."

并非所有消息都包含仅作为前缀或后缀的值.在动态语言中,这似乎是字符串格式化的逻辑任务.

对于不希望重复性的媒体(例如Slack频道),有很多不同的措辞,使用以下内容产生每个最终String输出:

pub fn h(x: usize) -> String {
    rand::sample(rand::thread_rng(), vec![
        format!("{} minutes remain.", x),
        format!("Hurry up; only {} minutes left to finish.", x),
        format!("Haste advisable; time ends in {}.", x),
        /* (insert many more elements here) */
    ], 1).first().unwrap_or(format!("{}", x))
}
Run Code Online (Sandbox Code Playgroud)

将会:

  • 每次打字都是作者单调乏味的format!(/*...*/, x).
  • 浪费内存+时钟周期,因为在选择一个之前完全生成每个可能性,丢弃其他可能性.

有没有办法避免这些缺点?

如果不是格式字符串的编译时评估,则返回随机选择&'static str(从静态片)传入的函数format!将是首选解决方案.

random string-formatting rust

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