小编buk*_*zor的帖子

perl:迭代一个typeglob

给定一个typeglob,我怎样才能找到实际定义的类型?

在我的应用程序中,我们将PERL用作简单的配置格式.我想要()用户配置文件,然后能够看到定义了哪些变量,以及它们是什么类型.

代码:(质量问题咨询)

#!/usr/bin/env perl

use strict;
use warnings;

my %before = %main::;
require "/path/to/my.config";
my %after = %main::;

foreach my $key (sort keys %after) {
    next if exists $before{$symbol}; 

    local *myglob = $after{$symbol};
    #the SCALAR glob is always defined, so we check the value instead
    if ( defined ${ *myglob{SCALAR} } ) {
        my $val = ${ *myglob{SCALAR} };
        print "\$$symbol = '".$val."'\n" ;
    }
    if ( defined *myglob{ARRAY} ) {
        my @val = @{ *myglob{ARRAY} }; …
Run Code Online (Sandbox Code Playgroud)

perl glob typeglob

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

bash:评论一条长管道

我发现在bash脚本中创建长流水线非常强大,但我看到的主要缺点是似乎没有办法插入注释.

例如,是否有一种向此脚本添加注释的好方法?

#find all my VNC sessions
ls -t $HOME/.vnc/*.pid                  \
    | xargs -n1                         \
    | sed 's|\.pid$||; s|^.*\.vnc/||g'  \
    | xargs -P50 --replace vncconfig -display {} -get desktop \
    | grep "($USER)"                    \
    | awk '{print $1}'                  \
    | xargs -n1 xdpyinfo -display       \
    | egrep "^name|dimensions|depths"
Run Code Online (Sandbox Code Playgroud)

bash comments pipeline sh

5
推荐指数
2
解决办法
1025
查看次数

在一般情况下,捕获错误参数异常

我想捕获一个异常,但前提是它来自下一级逻辑.

目的是处理由错误数量的参数调用函数的行为引起的错误,而不掩盖函数实现生成的错误.

我该如何实现以下wrong_arguments功能?

例:

try:
    return myfunc(*args)
except TypeError, error:
    #possibly wrong number of arguments
    #we know how to proceed if the error occurred when calling myfunc(), 
    #but we shouldn't interfere with errors in the implementation of myfunc
    if wrong_arguments(error, myfunc):
        return fixit()
    else:
        raise
Run Code Online (Sandbox Code Playgroud)

附录:

在简单的情况下,有几种解决方案可以很好地工作,但是当前的答案都不适用于装饰函数的真实情况.

考虑一下这些是myfunc上面可能的值:

def decorator(func):
    "The most trivial (and common) decorator"
    def wrapper(*args, **kwargs):
        return func(*args, **kwargs)

def myfunc1(a, b, c='ok'):
    return (a, b, c)

myfunc2 = decorator(myfunc1)
myfunc3 = decorator(myfunc2) …
Run Code Online (Sandbox Code Playgroud)

python exception try-catch decorator

5
推荐指数
2
解决办法
1754
查看次数

通过API将数据透视表添加到Google电子表格中

我想自动创建其中一个数据透视表:

https://drive.googleblog.com/2011/05/summarize-your-data-with-pivot-tables.html

给定一些数据和参数,该脚本将以非交互方式创建一个新的Google电子表格,其中包含数据透视表和图表.

这可能吗?

pivot-table google-api google-docs google-docs-api

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

是否有一种跨平台的方法可靠地找到带有ctypes的stdout文件描述符?

我有一些代码使用ctypes来尝试确定指向的文件sys.stdout是否实际 stdout.我知道在任何符合POSIX标准的系统上,甚至在Windows上,如果这样做应该是安全的sys.stdout.fileno() == 1,所以我的问题不是如何做到这一点.

在我的代码中(已经将ctypes用于与我的问题无关的东西)我不小心有类似的东西:

libc = ctypes.CDLL(ctypes.util.find_library('c'))
real_stdout = libc.fileno(ctypes.c_void_p.in_dll(libc, 'stdout'))
if sys.stdout.fileno() == real_stdout:
    ...
Run Code Online (Sandbox Code Playgroud)

这在Linux上完全正常,所以我并没有真正考虑它.它比硬编码1作为文件描述符看起来更好,更易读.但几天后我发现我的代码不能用于OSX.

它结束了OSX的libc不会导出任何名为'stdout'的符号.相反,它的stdio.h将stdout定义为:

#define stdout __stdoutp
Run Code Online (Sandbox Code Playgroud)

如果我将代码更改为c_void_p.in_dll(libc, '__stdoutp')我的代码按预期工作,但当然这只是OSX.事实证明,Windows有一个类似的问题(至少如果使用MSVC).

我可能只是改变我要使用的代码1,但我的问题仍然存在,出于好奇,如果有一种跨平台的方式来获取stdio指针(以及同样stdinstderr)而不假设它使用符合POSIX的描述符?

python macos ctypes posix darwin

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

d3:避免节点不变?

当通过d3.js传递数据时,库将数据划分为输入/更新/退出组件,但我发现我们在更新部分中浪费了大量的计算,以便通过重新计算和重新计算来保持不变的值.将属性设置为已经是当前的相同值.

有没有什么好方法可以将"更新"的集合进一步划分为更改/未更改的集合?

javascript performance d3.js

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

为什么调用locals()会添加引用?

我不明白以下行为.

  • 如何locals()产生新的参考?
  • 为什么gc.collect没有删除它?我没有在locals()任何地方分配结果.

X

import gc

from sys import getrefcount

def trivial(x): return x

def demo(x):
    print getrefcount(x)
    x = trivial(x)
    print getrefcount(x)
    locals()
    print getrefcount(x)
    gc.collect()
    print getrefcount(x)


demo(object())
Run Code Online (Sandbox Code Playgroud)

输出是:

$ python demo.py 
3
3
4
4
Run Code Online (Sandbox Code Playgroud)

python refcounting python-internals

5
推荐指数
2
解决办法
281
查看次数

Python:Metaclass属性有时会覆盖类属性?

以下代码的结果令我难以置信:

class MyClass(type):
    @property
    def a(self):
        return 1

class MyObject(object):
    __metaclass__ = MyClass

    a = 2

print MyObject.a
print object.__getattribute__(MyObject, 'a')
print type.__getattribute__(MyObject, 'a')
print MyObject.__dict__['a']
print MyObject().a
Run Code Online (Sandbox Code Playgroud)

我真的希望这只是2重复打印,但它会打印出来1 1 1 2 2.有没有一种方法可以直观感觉?


澄清一下:我理解这种行为有很好的文档记录(这里是"数据描述符"),但我想了解为什么这有意义,以及核心开发人员为什么以这种方式实现描述符.

python metaclass

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

更新virtualenv以匹配requirements.txt

目前,当我们的项目的requirements.txt更新时,我们从头开始重新构建virtualenv以确保一致的结果.问题是我们的requirements.txt非常冗长,对它的更新通常只触及一个包.

是否有任何系统将virtualenv与requirements.txt进行比较并进行最少量的更改以使它们匹配?

我可以自己写这个,如果我能得到pip告诉我它安装哪个版本给出一个requirements.txt,但我没有看到这样的选项.

python pip virtualenv requirements.txt

5
推荐指数
2
解决办法
3619
查看次数

awscli s3:通过stdin上传

我想将一个tarball上传到s3而不会产生临时文件的成本(我们在磁盘上很低).使用其他实用程序,我将tar命令的输出传递给upload命令,但它不适用于awscli:

$ echo ok | aws s3 cp /dev/stdin s3://my-bucket/test
upload failed: /dev/stdin to s3://my-bucket/test [Errno 29] Illegal seek
Run Code Online (Sandbox Code Playgroud)

有什么办法可以做我想要的吗?

amazon-s3 amazon-web-services aws-cli

5
推荐指数
2
解决办法
4045
查看次数