小编Ben*_*ank的帖子

从批处理文件触发任务栏按钮闪烁?

是否有可能从批处理文件中触发Windows"闪存任务栏按钮X次或直到窗口到达前台"行为?我试图在完成时将用户的注意力转移到长时间运行的脚本上.

只要不需要安装(即可执行文件可以与我的脚本捆绑在一起),使用外部程序来触发闪存就可以了.

更新

这就是我最终得到的(Andreas'Delphi代码的极简主义端口).我在MinGW下编译它似乎只依赖于KERNEL32.DLL和USER32.DLL,所以应该是高度可移植的.

闪烁三次,然后保持突出显示直到前景.

#define WINVER 0x501
#define _WIN32_WINNT 0x501

#include <windows.h>

void main(int argc, char **argv) {
    FLASHWINFO info = { sizeof(info), GetConsoleWindow(), FLASHW_TIMERNOFG | FLASHW_TRAY, 3, 0 };

    FlashWindowEx(&info);
}
Run Code Online (Sandbox Code Playgroud)

windows taskbar batch-file

21
推荐指数
1
解决办法
2493
查看次数

通过Python的eval()运行JSON?

除了最好的做法,有没有令人信服的理由这样做?

我正在编写一个post-commit钩子,用于Google Code项目,该项目通过JSON对象提供提交数据.GC提供HMAC身份验证令牌以及请求(在JSON数据之外),因此通过验证该令牌,我可以高度确信JSON数据是良性的(因为不信任Google)并且有效.

我自己(简短)的调查表明,JSON恰好是完全有效的Python,但"\/"转义序列除外- GC似乎没有生成.

因此,当我使用Python 2.4(即没有json模块)时,eval()看起来真的很诱人.

编辑:为了记录,我不是在问这是不是一个好主意.我非常清楚它不是,我非常怀疑即使我最终将它用于这个项目,我也会将这项技术用于任何未来的项目.我只是想确保我知道如果我这样做会遇到什么样的麻烦.:-)

python json

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

按Lua中的值关联排序表

我有一个key => value表我想在Lua中排序.键都是整数,但不是连续的(并且有意义).Lua唯一的排序函数似乎是table.sort,它将表视为简单数组,丢弃原始密钥及其与特定项的关联.相反,我基本上希望能够使用PHP的asort()功能.

是)我有的:

items = {
    [1004] = "foo",
    [1234] = "bar",
    [3188] = "baz",
    [7007] = "quux",
}
Run Code Online (Sandbox Code Playgroud)

排序操作后我想要的是:

items = {
    [1234] = "bar",
    [3188] = "baz",
    [1004] = "foo",
    [7007] = "quux",
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

编辑:根据答案,我将假设它只是我正在使用的特定嵌入式Lua解释器的一个奇怪的怪癖,但在我的所有测试中,pairs()总是按照它们被添加到的顺序返回表项桌子.(即上述两个声明将以不同方式迭代).

不幸的是,因为这不是正常的行为,看起来我无法得到我需要的东西; Lua没有内置的必要工具(当然),嵌入式环境对我来说太有限了.

不过,谢谢你的帮助!

sorting lua asort lua-table

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

通过子类化修改namedtuple的构造函数参数?

我想创建一个namedtuple代表短位域中的各个标志的代码.我正在尝试将其子类化,以便在创建元组之前解压缩位域.但是,我目前的尝试不起作用:

class Status(collections.namedtuple("Status", "started checking start_after_check checked error paused queued loaded")):
    __slots__ = ()

    def __new__(cls, status):
        super(cls).__new__(cls, status & 1, status & 2, status & 4, status & 8, status & 16, status & 32, status & 64, status & 128)
Run Code Online (Sandbox Code Playgroud)

现在,我的经验super()是有限的,我的经验__new__实际上是不存在的,所以我不太清楚该怎么做(对我来说)神秘的错误TypeError: super.__new__(Status): Status is not a subtype of super.谷歌搜索和挖掘文档并没有产生什么启发.

救命?

python super new-operator namedtuple

18
推荐指数
2
解决办法
7199
查看次数

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

Windows的命令行XML验证程序

我总是发现针对模式的验证是对thinkos的一个无价之宝,并希望将验证检查作为项目的一部分,我经常需要手工编写几百行的XML文件.我的文本编辑器有一个相当不错的CLI集成功能,所以我正在寻找一个命令行验证器.

当我没有通过谷歌找到任何明确的赢家时,我在这里找到了一个类似的问题,但是没有一个工具能够满足我的需求:

  • libxml(通过cygwin) - 不报告行号; 我不知道我的错误在哪里!
  • msxml - 无法从命令行运行?
  • xerces-c - 似乎需要Visual C的副本?
  • xerces2-j - 无法从命令行运行?
  • xmlstarlet - XSD支持不足*

(*我正在验证的模式使用替换组 - 不恰当,但它在项目的外部,所以我无法更改它 - 这导致xmlstarlet甚至在有效文件上阻塞.)

通常情况下,这是解决一个问题的重点,在这个问题上,我放弃寻找现有的解决方案并获得Python-hammer,但Python的XML支持是众所周知的......好吧......实际上,让我们把它留在"臭名昭着" .

所以我回来寻找一个预先存在的工具.我的要求非常简单:

  • 在Win32上运行(特别是Windows XP SP3)
  • 命令行; 我的编辑器可以使用stdin/-out/-err,参数,临时文件等的任何组合.
  • 合理完成XSD支持(特别是命名空间和替换组)
  • 报告错误发生的行号!

这样的工具存在吗?我不想安装Visual Studio和朋友(太臃肿,IMO),但我已经安装了Cygwin和Python.

xml windows validation command-line xsd

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

如何使用XPath选择最后N个元素?

我支持一个生成内容XML的网站,然后使用XSLT将其翻译成网页.我被要求创建一个新的样式表,它将"存档"页面的输出转换为Atom以进行联合.我遇到的问题是存档页面包含相当多的项目 - 142和计数 - 并且Feed应该永远不会有超过30个项目.

目前,存档页面的输出如下所示:

<archive>
    <year>
        <month>
            <day>
            <day>
            ...
        </month>

        ...
    </year>

    ...
</archive>
Run Code Online (Sandbox Code Playgroud)

yearmonth标签由HTML中使用的变换,但完全不相干的一个Atom feed.我曾希望使用position()带有后代轴的函数可以工作(//day[position()>last()-30]),但这会选择每个月的最后30天,这根本不是我需要的.:-)

有没有办法用XSLT或XPath做到这一点?必须修改XML生成器以添加(例如)feed="true"过去30天的属性,这似乎是一个非常讨厌的问题.

xml xslt xpath

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

如何使用包含额外数据的Gzip文件?

我正在编写一个脚本,它将使用来自仪器的数据作为gzip流.在大约90%的情况下,gzip模块工作得很好,但有些流导致它产生IOError: Not a gzipped file.如果删除gzip标头并将deflate流直接送入zlib,我会得到Error -3 while decompressing data: incorrect header check.在将我的头撞到墙上大约半天之后,我发现有问题的流包含一个看似随机数量的额外字节(不是gzip数据的一部分)附加到末尾.

令我感到奇怪的是Python无法使用这些文件有两个原因:

  1. Gzip和7zip都可以毫无问题地打开这些"填充"文件.(Gzip产生消息decompression OK, trailing garbage ignored,7zip默默地成功.)
  2. Gzip和Python文档似乎都表明这应该有用:(强调我的)

    Gzip的format.txt:

    无论压缩数据的实际大小如何,都必须能够使用任何压缩方法检测压缩数据的结尾.特别是,解压缩器必须能够检测并跳过附加到面向记录的文件系统上的有效压缩文件的额外数据,或者当压缩数据只能以某个块大小的倍数从设备读取时.

    Python的gzip.GzipFile`:

    调用GzipFile对象的close()方法不会关闭fileobj,因为您可能希望在压缩数据之后附加更多材料.这也允许您将StringIO打开的对象作为fileobj传递,并使用StringIO对象的getvalue()方法检索生成的内存缓冲区.

    Python的zlib.Decompress.unused_data:

    一个字符串,包含压缩数据末尾之后的任何字节.也就是说,这一直存在,""直到包含压缩数据的最后一个字节可用.如果整个字符串结果包含压缩数据,则为""空字符串.

    确定压缩数据字符串结束位置的唯一方法是实际解压缩它.这意味着当压缩数据包含在较大文件的一部分时,您只能通过读取数据并将其后跟一些非空字符串添加到解压缩对象的decompress()方法中来找到它的结尾,直到该unused_data属性不再是空字符串.

以下是我尝试过的四种方法.(这些例子是Python 3.1,但我测试了2.5和2.7并且遇到了同样的问题.)

# approach 1 - gzip.open
with gzip.open(filename) as …
Run Code Online (Sandbox Code Playgroud)

python gzip

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

如何在Java中实例化泛型类型?

我已经在我的应用程序中添加了一个人类可读的配置文件,java.util.Properties并尝试在其周围添加包装以使类型转换更容易.具体来说,我希望返回的值从提供的默认值"继承"它的类型.这是我到目前为止所得到的:

protected <T> T getProperty(String key, T fallback) {
    String value = properties.getProperty(key);

    if (value == null) {
        return fallback;
    } else {
        return new T(value);
    }
}
Run Code Online (Sandbox Code Playgroud)

(完整示例源.)

getProperty("foo", true)无论是从属性文件中读取还是类似于字符串,整数,双精度和c,返回值都将是一个布尔值.当然,上面的代码段实际上并没有编译:

PropertiesExample.java:35: unexpected type
found   : type parameter T
required: class
                        return new T(value);
                                   ^
1 error
Run Code Online (Sandbox Code Playgroud)

我做错了,还是我只是想做一些无法做到的事情?

编辑:用法示例:

// I'm trying to simplify this...
protected void func1() {
    foobar = new Integer(properties.getProperty("foobar", "210"));
    foobaz = new Boolean(properties.getProperty("foobaz", "true"));
}

// ...into this...
protected void func2() …
Run Code Online (Sandbox Code Playgroud)

java generics

12
推荐指数
1
解决办法
9664
查看次数

如何循环直到Python中的EOF?

我需要循环,直到我到达类似文件的对象的末尾,但我没有找到"明显的方法去做",这让我怀疑我忽略了一些东西,很明显.:-)

我有一个流(在这种情况下,它是一个StringIO对象,但我也对一般情况感到好奇)以"<length> <data>"格式存储未知数量的记录,例如:

data = StringIO("\x07\x00\x00\x00foobar\x00\x04\x00\x00\x00baz\x00")
Run Code Online (Sandbox Code Playgroud)

现在,我能想象的唯一清晰的方法就是使用(我认为是)一个初始化的循环,这看起来有点像非Pythonic:

len_name = data.read(4)

while len_name != "":
    len_name = struct.unpack("<I", len_name)[0]
    names.append(data.read(len_name))

    len_name = data.read(4)
Run Code Online (Sandbox Code Playgroud)

在一个类似C语言,我只是坚持的read(4)while的测试条款,但当然不会对Python的工作.有没有想过更好的方法来实现这个目标?

python eof stringio

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