小编Ada*_*tan的帖子

装饰\委托File对象以添加功能

我一直在编写一个小的Python脚本,它使用subprocess模块和辅助函数执行一些shell命令:

import subprocess as sp
def run(command, description):
    """Runs a command in a formatted manner. Returns its return code."""
    start=datetime.datetime.now()
    sys.stderr.write('%-65s' % description)
    s=sp.Popen(command, shell=True, stderr=sp.PIPE, stdout=sp.PIPE)
    out,err=s.communicate()
    end=datetime.datetime.now()
    duration=end-start
    status='Done' if s.returncode==0 else 'Failed'
    print '%s (%d seconds)' % (status, duration.seconds)
Run Code Online (Sandbox Code Playgroud)

以下行读取标准输出和错误:

    s=sp.Popen(command, shell=True, stderr=sp.PIPE, stdout=sp.PIPE)
    out,err=s.communicate()
Run Code Online (Sandbox Code Playgroud)

如您所见,未使用stdout和stderr.假设我想以格式化的方式将输出和错误消息写入日志文件,例如:

[STDOUT: 2011-01-17 14:53:55] <message>
[STDERR: 2011-01-17 14:53:56] <message>
Run Code Online (Sandbox Code Playgroud)

我的问题是,最恐怖的方式是什么?我想到了三个选择:

  1. 继承文件对象并覆盖该write方法.
  2. 使用实现的Delegate类write.
  3. PIPE某种方式连接到自身.

更新:参考测试脚本

我正在使用此脚本检查结果,保存为test.py:

#!/usr/bin/python
import sys

sys.stdout.write('OUT\n')
sys.stdout.flush()
sys.stderr.write('ERR\n')
sys.stderr.flush() …
Run Code Online (Sandbox Code Playgroud)

python logging subprocess design-patterns

14
推荐指数
1
解决办法
1199
查看次数

arc4random(mac os x)的随机性如何?(或者我做错了什么?)

我正在使用swift/mac_os_x中优化的生活游戏实现.第一步:随机化一大块细胞(50%活着).

码:

for(var i=0;i<768;i++){
  for(var j=0;j<768;j++){
    let r = Int(arc4random_uniform(100))
    let alive = (aliveOdds > r)
    self.setState(alive,cell: Cell(tup:(i,j)),cells: aliveCells)
  }
}
Run Code Online (Sandbox Code Playgroud)

我期待相对均匀的随机性.我得到的有明确的模式:

大图

放大左下角:

放大了

(我已经在每32行和每列上将颜色更改为黑色,以查看图案是否排列为2的任何幂).

是什么导致这些模式?我试过了:

  • 用arc替换arc4random rand().
  • arc4stir()在每个arc4random_uniform调用之前添加
  • 移动显示器(确保模式在数据中,而不是显示故障)

关于下一步的想法?

random macos arc4random ios swift

14
推荐指数
1
解决办法
657
查看次数

如何获取已退出的docker容器的数字退出状态?

当容器退出时,docker ps -a显示其退出代码(滚动

$ docker run ubuntu bash -c "exit 1"
CONTAINER ID   IMAGE    COMMAND              CREATED        STATUS                     PORTS                     NAMES
c2c769c4b9ef   ubuntu   "bash -c 'exit 1'"   6 seconds ago  Exited (1) 3 seconds ago                             happy_fermat
Run Code Online (Sandbox Code Playgroud)

如何以编程方式获取数字退出代码,而不会出现容易出错grepcut-ing?

exit-code docker

14
推荐指数
4
解决办法
8900
查看次数

在现有的SVN repo上使用git

我使用旧版svn回购.但是,我想享受git我本地机器的好处.

  • 第一个选项是git init我当前仓库的根,编写代码,并在本地(git commit)和远程(svn commit)独立提交代码.
  • 第二种选择是git-svn,但我不知道是否值得学习新工具细微差别的麻烦.

我该怎么办呢?

svn git git-svn

13
推荐指数
3
解决办法
6877
查看次数

Android adb(OSX Lion)无法识别Galaxy Nexus,Jelly Bean

我一直在开发OSX Lion上安装的Eclipse上的第一个Android应用程序.我想使用我的Jelly Beans Galaxy Nexus进行调试,但Android Device Bridge(adb)无法找到该设备:

./adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached 
Run Code Online (Sandbox Code Playgroud)
  • 手机处于调试模式.
  • 手机可识别为相机(PTP),但不能作为媒体设备(MTP)识别.无论PTP\MTP设置如何,ADB都不起作用.
  • 我已经重新启动了手机和Mac
  • 按照这个建议,我安装了Android文件传输.ATF识别该设备,但亚行没有运气.

有任何想法吗?

附录:我已经报告了一个错误.解决方法仍然是最受欢迎的!

9月5日13:28 UTC - 解决方法#1:Dropbox:我已将OSX Eclipse工作区移至Dropbox并在设备上安装了Dropbox.APK被写入bin/,并在每次成功构建后从Dropbox应用程序重新安装它.

在此输入图像描述

eclipse macos android adb

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

使用参数实例化Python unittest.TestCase

我想迭代一个项目列表,并对每个项目运行一个断言.一个例子可能是检查列表中的每个数字是否为奇数.

TestCase:

class TestOdd(unittest.TestCase):
    def runTest(self):
        """Assert that the item is odd"""
        self.assertTrue( NUMBER %2==1, "Number should be odd")
Run Code Online (Sandbox Code Playgroud)

测试suite:

if __name__ == '__main__':
    suite = unittest.TestSuite()
    suite.addTest(TestOdd())
    # I would like to have:
    # suite.addTest(TestOdd(1))
    # suite.addTest(TestOdd(2))
    # suite.addTest(TestOdd(3))
    # ...
    unittest.main()
Run Code Online (Sandbox Code Playgroud)

如何TestOdd使用参数实例化对象 - 例如,要测试的数字?

更新:根据2011年的博客文章(发布为答案),没有内置的参数化测试机制.我很乐意接受任何更清洁的解决方案.

arguments test-suite python-2.7 python-unittest

13
推荐指数
2
解决办法
7986
查看次数

如何启用uWSGI日志记录到文件?

我刚刚在EC2 Ubuntu 14.04 LTS上安装了我的第一个uWSGI服务器,使用以下配置:

[uwsgi]
http-socket    = :9001
plugin    = python
wsgi-file = foo.wsgi
chdir = /home/bar
process   = 3
Run Code Online (Sandbox Code Playgroud)

uWSGI容器工作正常,但没有日志记录.按照手册,我添加了以下内容:

logger = file:/tmp/errlog
Run Code Online (Sandbox Code Playgroud)

但是重新启动(使用sudo service uwsgi restart)不起作用 - 服务器不会以此配置启动.

知道我的ini配置中缺少什么吗?

logging ini uwsgi

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

在REST中表示Kibana查询,卷曲形式

我有一个经典ELK配置的Kibana服务器,查询Elasticsearch实例.

我使用Kibana控制台对elasticsearch执行复杂的查询.我想使用cURL或任何其他http工具在命令行中使用其中一些查询.

如何将Kibana搜索转换为类似于弹性搜索的直接,类似cURL的REST调用

rest curl http elasticsearch kibana

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

PostgreSQL:在timestamp :: DATE上创建索引

我正在创建一个汇总表,汇总给定日期内的所有事件.

INSERT INTO graph_6(
  day,
  event_type,
  (SELECT COUNT(*) FROM event e 
                  WHERE event_type = e.event_type 
                  AND creation_time::DATE = sq.day)
FROM event_type
CROSS JOIN
    (SELECT generate_series(
                (SELECT '2014-01-01'::DATE),
                (SELECT '2014-01-02'::DATE),
                '1 day') as day) sq;
Run Code Online (Sandbox Code Playgroud)

creation_time列已编入索引:

CREATE INDEX event_creation_time_date_idx ON event USING BTREE(creation_time);
Run Code Online (Sandbox Code Playgroud)

但是,即使仅使用少量事件(2014年1月1日至2日)查询两天的数据,查询也会运行很长时间.

EXPLAIN上查询是相当严峻-它运行一个顺序扫描的event表,而不是利用指数都:

->  Seq Scan on event e_1  (cost=0.00..12557.39 rows=531 width=38)
Filter: ... AND ((creation_time)::date = (generate_series(($12)::timestamp with time zone, ($13)::timestamp with time zone, '1 day'::interval))))
Run Code Online (Sandbox Code Playgroud)

我认为这是因为我们比较了一个铸造值 - creation_time::DATE而不是creation_time.我试过索引转换: …

sql postgresql indexing casting date

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

Terraform:从模块输出字段

考虑一个terraform模块:

module "blah-asg" {
  source = "asg"

  asg_max_size       = 1
  asg_min_size       = "${var.min_blah}"
  ...
}
Run Code Online (Sandbox Code Playgroud)

我的问题

我怎么output变量呢?

我试过了什么

output "blah-es-asg" {
    value = "${asg.blah-asg.arn}"
}
Run Code Online (Sandbox Code Playgroud)

哪个失败了

获取插件时出错:模块root:发生1个错误:*输出'blah-asg':变量asg.blah-asg.arn中引用的未知资源'asg.blah'

我的问题

如何在Terraform中输出模块字段?

terraform

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