小编mir*_*e2k的帖子

Python:体面的配置文件格式

我想使用一种配置文件格式,它支持键值对和可嵌套的,可重复的结构,并且尽可能地使用语法.我想象的是:

cachedir = /var/cache
mail_to = me@example.org

job {
   name = my-media
   frequency = 1 day
   source {
      from = /home/michael/Images

   source { }
   source { }       
}

job { }
Run Code Online (Sandbox Code Playgroud)

我对使用重要空白的东西感到满意.

JSON需要太多明确的语法规则(引用,逗号等).YAML实际上非常好,但是需要将作业定义为YAML列表,我发现使用起来有些尴尬.

python configuration parsing config configuration-files

8
推荐指数
2
解决办法
8648
查看次数

Python:将格式字符串转换为正则表达式

我的应用程序的用户可以通过格式字符串配置某些文件的布局.

例如,用户指定的配置值可能是:

layout = '%(group)s/foo-%(locale)s/file.txt'
Run Code Online (Sandbox Code Playgroud)

我现在需要找到已经存在的所有这些文件.使用glob模块这似乎很容易:

glob_pattern = layout % {'group': '*', 'locale': '*'}
glob.glob(glob_pattern)
Run Code Online (Sandbox Code Playgroud)

但是,现在出现了困难的部分:给定glob结果列表,我需要获得与给定占位符匹配的所有文件名部分,例如所有不同的"locale"值.

我以为我会为格式字符串生成一个正则表达式,然后我可以匹配glob结果列表(或者可能跳过glob并自己完成所有匹配).

但我找不到一个很好的方法来创建正则表达式与正确的组捕获,并逃避其余的输入.

例如,这可能会给我一个与语言环境匹配的正则表达式:

regex = layout % {'group': '.*', 'locale': (.*)}
Run Code Online (Sandbox Code Playgroud)

但是为了确保正则表达式是有效的,我需要通过re.escape()传递它,然后它也会转义我刚刚插入的正则表达式语法.调用re.escape()首先会破坏格式字符串.

我知道有fnmatch.translate(),它甚至会给我一个正则表达式 - 但不会返回正确的组.

有没有一个很好的方法来做到这一点,没有像使用正则表达式安全的唯一值替换占位符等黑客?

是否有某种方式(可能是第三方库?)允许以更灵活的方式解析格式字符串,例如在占位符位置拆分字符串?

python regex formatting

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

在远程计算机上测试木偶脚本真的没有简单的方法吗?

我正在尝试使用Puppet脚本进行部署.

我发现编写这些脚本的过程中最困难的部分是迭代测试它们.

我不想puppet apply在我的本地开发机器上,容易搞砸东西.我有一个干净的远程盒子,我想申请.我也看不到木偶大师如何帮助我; 我可能会在以后使用puppetmaster进行生产部署,但是现在,我只想让我的代码正常工作.

所以我整理了一个快速的shell脚本,它将我的本地puppet模块路径中的不同目录与远程机器上的/ tmp进行rsync,然后运行puppet apply.这非常不方便.这很慢,特别是如果我们谈论语法错误.

我认为我真正想要的是像puppetd ​​< - > puppetmaster连接,其中远程机器上的puppetd接收已编译的清单.只是一个通过SSH连接的adhoc-one,无需实际设置Puppetmaster,处理证书等puppet apply user@host.

似乎没有那种,但其他人如何处理这个?我在Puppet脚本上工作的经历对我来说非常令人沮丧.

puppet

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

在Java中返回嵌套的类类型

我有一个具有抽象getType()方法的基类.我希望子类能够实现此方法并提供要使用的实际类.

在代码中,类似于以下内容:

public abstract class A {
    public static interface Tile;

    protected abstract Class<Tile> getTileClass();
}

public class B extends A {
    public static class MyTile implements A.Tile { }

    @Override
    protected abstract Class<A.Tile> getTileClass() {
        MyTile t = new MyTile();  // WORKS 
        return MyTile;            // ERROR HERE
    }
}
Run Code Online (Sandbox Code Playgroud)

这里的问题是我在标记的行中得到"MyTile无法解析".所以我试图回复这个:

返回新的MyTile().getClass()

但现在Eclipse告诉我:

类型不匹配:无法转换类<捕获#1-of?将B.MyTile扩展> 到Class <A.Tile>

我甚至不确定Eclipse中是否有可能存在错误(捕获#1?).

接下来,我放弃接口并尝试使用抽象基础Tile类.在Eclipse的帮助下,我最终得到了以下似乎编译的代码:

public abstract class A {
    public static abstract class Tile;

    protected abstract Class<? extends Tile> getTileClass();
} …
Run Code Online (Sandbox Code Playgroud)

java oop class nested-class

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

SQLAlchemy等同于Django的annotate()方法

我正在SQLAlchemy中进行这样的连接:

 items = Item.query\
    .outerjoin((ItemInfo, ItemInfo.item_id==Item.id))
 items.add_columns(ItemInfo.count)
Run Code Online (Sandbox Code Playgroud)

这会导致SQLAlchemy返回元组:

 >>> items.first()
 (<Item ...>, 2)
Run Code Online (Sandbox Code Playgroud)

我更喜欢它,如果"count"值将作为项目的属性返回,即我想做:

 >>> items.first().count
 2
Run Code Online (Sandbox Code Playgroud)

这支持吗?

python django orm sqlalchemy

4
推荐指数
1
解决办法
1349
查看次数

等待Python异步生成器

假设我有两个异步生成器:

async def get_rules():
    while True:
        yield 'rule=1'
        asyncio.sleep(2)


async def get_snapshots():
    while True:
        yield 'snapshot=1'
        asyncio.sleep(5)
Run Code Online (Sandbox Code Playgroud)

我想将它们合并到一个异步生成器中,该生成器返回2元组,其中包含两个元组的最新值.排序combineLatest.

做这个的最好方式是什么?

python-3.x python-asyncio

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