小编bed*_*wyr的帖子

是否可以根据消息日志级别修改Python的日志记录格式?

我正在使用Python的logging机制将输出打印到屏幕上.我可以使用print语句执行此操作,但我希望允许用户更精细地调整粒度以禁用某些类型的输出.我喜欢为错误打印的格式,但是当输出级别为"info"时,我更喜欢更简单的格式.

例如:

  logger.error("Running cmd failed")
  logger.info("Running cmd passed")
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我希望以不同的方式打印错误的格式:

# error
Aug 27, 2009 - ERROR: Running cmd failed
# info
Running cmd passed
Run Code Online (Sandbox Code Playgroud)

是否可以为不同的日志级别设置不同的格式而无需多个日志记录对象?我宁愿在没有修改记录器的情况下这样做,因为有大量的if/else语句来确定如何记录输出.

python logging string-formatting

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

Scrum流程最终会剥夺团队成员各自的技能吗?

我的组织一直在尝试引入更多"敏捷"方法.我们一直在尝试Scrum方法,大多数团队或多或少都适应了它.我喜欢它作为一个整体,但我担心该方法的一个潜在的严重影响:由于团队一直专注于功能和积压项目,并且测试人员与整个开发过程更加整合,似乎技能组合正在变得模糊不清,人们对自己的个人能力缺乏尊重.

我们的一些开发人员在服务器端技术和优化重量级数据配置方面表现出色.其他人已经投入了大量的职业学习GUI技术,并在应用程序中对用户和可用性有了基本的了解.技能组合都不比另一组技术好,但它们肯定是不同的.

这是Scrum流程的必然结果吗?由于团队中的每个人(据我所知)都有助于满足下一个功能/要求,积压项目或测试目标,因此基本理念似乎是"任何人都可以做到".根据我的经验,这根本不是真的.大多数工程师(开发人员,测试人员等)都拥有他们多年来磨练的特定技能,而在我看来,Scrum方法往往会贬低他们之前所尊重的那些能力.

这是一个澄清的例子:

如果服务器端数据配置发生突然的技术更改,并且sprint的待办事项列表中的每个项目都基于这一新变化,那么GUI开发人员(可能没有时间适应新技术)可能无法为冲刺做出贡献.至少,他们需要投入时间来加强,然后他们的代码将因为缺乏经验而受到怀疑.

我理解快速发展的必要性,以阻止"角色孤岛",但这并没有打折一个基本现实:人们根据必要性,兴趣或经验发展技能.当人们认为他们的位置是"插件能力"之一时,他们似乎没有那么积极性(例如,我们可以"插入"任何人来执行这项特定任务).Scrum如何解决这个问题?如果没有,有人在采用Scrum方法时解决了这个问题吗?

scrum

23
推荐指数
2
解决办法
3689
查看次数

问题re:使用Python进行GUI编程的当前状态

我最近做了一些工作修改使用wxPython小部件的Python gui应用程序.我已经在过去的六七年中尝试过Python,但这是我第一次使用gui进行任何工作.我对使用Python的gui编程的当前状态感到非常失望.我非常喜欢Python语言本身,这是我习惯的Delphi/ObjectPascal编程的一个有趣变化,对于通用编程任务来说肯定是一个很大的生产力提升.我想转向Python以获取一切.

但是wxPython是Delphi的VCL或.NET的WinForms之后的一大步.虽然Python本身通过编程更高级别的抽象提供了良好的生产力增益,但wxPython的使用方式比VCL更低的抽象级别.例如,我浪费了很多时间试图让wxPython列表对象按照我想要的方式运行.只是添加可排序的列涉及几个代码密集的步骤,一个用于创建和维护提供实际排序顺序的阴影数据结构,另一个用于在列标题中显示图形排序方向三角形,以及还有一些我不记得了.所有这些容易出错的步骤都可以通过使用我的Delphi网格组件设置属性值来完成.

我的结论是:虽然Python通过提高许多通用编码的抽象级别来提高生产率,但wxPython的几个抽象级别比Delphi的gui工具要.最终结果:使用Delphi进行gui编程比使用Python进行gui编程要快得多,而得到的带有Delphi的ui仍然更加精致和功能齐全.对我来说,似乎并不夸张地认为Delphi gui编程在1995年比使用wxPython的python gui编程更加先进.

我做了一些其他python gui框架的调查,看起来没有任何比wxPython好得多.我也对wxPython的gui formbuilders进行了一些简单的调查,这会让事情变得更好一些.但是大多数报道这些解决方案都是错误的,甚至一个伟大的formbuilder都无法解决我对wxPython的主要抱怨,这只是因为它具有较少的功能,并且通常要求你以比我低得多的抽象级别进行gui编程.以前用于Delphi的VCL.一些快速调查建议的python gui-dev解​​决方案(http://wiki.python.org/moin/GuiProgramming)对于习惯使用Delphi或.NET的人来说实在有些令人沮丧.

最后,我有几个问题.

首先,我错过了什么吗?是否有一些Python的gui开发解决方案可以与VCL或WinForms编程进行比较?我不一定关心它是否与Delphi的VCL不相符.我只是在找同一个联盟的东西.

第二,IronPython可以成为前进的方向吗?我大多试图避免喝.NET koolaid,但也许IronPython让我有理由最终放弃.即便如此,IronPython是否与WinForms完全集成,或者我需要让表单本身由c#或vb支持.净?在我看来,SharpDevelop和MonoDevelop就是这种情况(即,IronPython不能用于设计时间的gui构建).VS.NET是否将IronPython与gui-building完全集成?

在我看来,像Python一样可以"接管世界"的方式类似于Visual Basic在1990年代早期的方式,如果有一些精彩的新gui构建解决方案出现在Python中.只有这次使用Python,我们才能拥有全新的快速,跨平台和开源 gui编程范例 .企业不会吃掉它吗?是的,我知道,网络应用程序是当今最重要的事情,所以一个伟大的Python-gui解决方案不会创造VB曾经做过的同样的革命.但是我没有看到gui编程消失,我想要一个很好的现代,开源,高级解决方案.

python user-interface

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

Pythonic将整数列表转换为逗号分隔范围字符串的方法

我有一个整数列表,我需要解析为一系列范围.

例如:

 [0, 1, 2, 3] -> "0-3"
 [0, 1, 2, 4, 8] -> "0-2,4,8"
Run Code Online (Sandbox Code Playgroud)

等等.

我还在学习更多pythonic处理列表的方法,这对我来说有点困难.我最近的想法是创建一个列表,跟踪配对数字:

[ [0, 3], [4, 4], [5, 9], [20, 20] ]
Run Code Online (Sandbox Code Playgroud)

然后,我可以遍历此结构,将每个子列表打印为范围或单个值.

我不喜欢在两次迭代中这样做,但我似乎无法跟踪每次迭代中的每个数字.我的想法是做这样的事情:

这是我最近的尝试.它有效,但我并不完全满意; 我一直在想,有一个更优雅的解决方案完全逃脱了我.字符串处理迭代不是最好的,我知道 - 对我来说这是很早的:)

def createRangeString(zones):
        rangeIdx = 0
        ranges   = [[zones[0], zones[0]]]
        for zone in list(zones):
            if ranges[rangeIdx][1] in (zone, zone-1):
                ranges[rangeIdx][1] = zone
            else:
                ranges.append([zone, zone])
                rangeIdx += 1

        rangeStr = ""
        for range in ranges:
            if range[0] != range[1]:
                rangeStr = "%s,%d-%d" % (rangeStr, range[0], range[1])
            else:
                rangeStr …
Run Code Online (Sandbox Code Playgroud)

python list

17
推荐指数
1
解决办法
2840
查看次数

在数据库中存储加密的用户名哈希

我正在为我正在组合的应用程序进行基本用户身份验证,而且我没有太多安全经验.

这就是说,我理解在数据库中将(盐渍)密码哈希作为blob进行盐析/存储的做法(和必要性),而不是密码(加密或否).我已经实现了这一点.

通过对用户名进行腌制/散列并将散列存储在数据库中,而不是明文(或加密)中的用户名,是否可以获得任何东西?令我感到震惊的是,这将使得确定哪些用户可以使用数据库进行身份验证来访问系统变得更加困难.

由于让某人难以破解用户帐户的密码至关重要,因此增加确定哪些用户可行的难度也不合理吗?

编辑:我可能使用的某些语言不是100%正确:随意纠正:-)

编辑2:我改变了我的第一个点,表示腌制哈希 - 感谢大家指出我错过了这个:-)

Edit3:删除了表示我正在加密/解密密码的措辞.我正在使用盐渍哈希并将其存储在数据库中 - 感谢Scotty指出这一点.

database security

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

如何以Pythonic方式检测CSV文件中的缺失字段?

我正在尝试使用Python的csv模块(特别是DictReader类)解析CSV文件.是否有Pythonic方法来检测空或丢失的字段并抛出错误?

这是一个使用以下标题的示例文件:NAME,LABEL,VALUE

foo,bar,baz
yes,no
x,y,z
Run Code Online (Sandbox Code Playgroud)

在解析时,我希望第二行抛出错误,因为它缺少VALUE字段.

这是一段代码片段,展示了我是如何接近这一点的(忽略硬编码字符串......它们只是为了简洁而存在):

import csv

HEADERS = ["name", "label", "value" ]
fileH = open('configFile')
reader = csv.DictReader(fileH, HEADERS)

for row in reader:
    if row["name"] is None or row["name"] == "":
        # raise Error
    if row["label"] is None or row["label"] == "":
        # raise Error
    ...
fileH.close()
Run Code Online (Sandbox Code Playgroud)

是否有更清晰的方法来检查CSV文件中的字段是否有一堆if语句?如果我需要添加更多字段,我还需要更多条件,如果可能的话我想避免这些条件.

python csv error-handling

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

在PyQt4 QTableWidget中将最小列宽设置为标题宽度

我正在使用QTableWidgetPyQt4中的组件,根据各自的标头长度,我似乎无法正确地确定列的大小.

这是表布局应该是什么样的(显然没有管道):

Index | Long_Header | Longer_Header
1     | 102402      | 100
2     | 123123      | 2
3     | 454689      | 18
Run Code Online (Sandbox Code Playgroud)

我正在使用的代码看起来像这样:

import sys
from PyQt4.QtCore import QStringList, QString
from PyQt4.QtGui  import QApplication, QMainWindow, QSizePolicy
from PyQt4.QtGui  import QTableWidget, QTableWidgetItem

def createTable():
    table = QTableWidget(5, 3)
    table.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)

    headers = QStringList()
    headers.append(QString("Index"))
    headers.append(QString("Long_Header"))
    headers.append(QString("Longer_Header"))

    table.setHorizontalHeaderLabels(headers)
    table.horizontalHeader().setStretchLastSection(True)

    # ignore crappy names -- this is just an example :)
    cell1 = QTableWidgetItem(QString("1"))
    cell2 = QTableWidgetItem(QString("102402"))
    cell3 = QTableWidgetItem(QString("100"))

    cell4 …
Run Code Online (Sandbox Code Playgroud)

python pyqt4

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

是否应允许开发人员参与积压计划流程?

我最近采访了一家公司,该公司已开始为其开发周期引入Scrum.我向其中一位开发人员询问了他们的体验是什么,听起来他们完全脱离了规划过程.他不允许任何关于什么进入特定Sprint的输入,也没有参与任何计划或修饰活动.

基本上,在最后一个Sprint(或两个)开始时,他被交给了待办事项清单.他不得不将项目分解为各自的任务(因此他们可以在Sprint上工作),但没有参与任何计划活动; 我怀疑他被允许对项目可能花费多少努力的大量投入 - 我怀疑建筑师为团队决定了这一点.

这是Scrum应该如何处理?我现在的团队完全参与所有计划活动,不断添加我们对如何解决功能以及可能采取多少措施的意见.我对一家公司有点持怀疑态度(并且很紧张),该公司只是简单地将开发人员列入待办事项清单而不要求他们提供意见.

注意:据我所知,一旦Sprint启动,列表确实是一个优先的待办事项列表.我担心的是从一开始就没有投入到规划过程中.

agile scrum backlog

5
推荐指数
3
解决办法
690
查看次数

如果我使用byte而不是int,我的循环迭代会更快吗?

这个代码,

for (byte b = 0; b < 100; b++)
{
    //some code
}
Run Code Online (Sandbox Code Playgroud)


比这段代码跑得快?

for (int b = 0; b < 100; b++)
{
    //some code
}
Run Code Online (Sandbox Code Playgroud)

java

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

不支持的flex/actionscript采样

我需要的动作脚本

  Loading configuration file /opt/flex/frameworks/flex-config.xml
  t3.mxml(10): Error: unsupported sampling rate (24000Hz)

        [Embed(source="music.mp3")]

     t3.mxml(10): Error: Unable to transcode music.mp3.

        [Embed(source="music.mp3")]
Run Code Online (Sandbox Code Playgroud)

代码是

         <?xml version="1.0"?>
   <!-- embed/EmbedSound.mxml -->
  <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

  <mx:Script>
    <![CDATA[

        import flash.media.*; 

        [Embed(source="sample.mp3")]
        [Bindable]
        public var sndCls:Class;

        public var snd:Sound = new sndCls() as Sound; 
        public var sndChannel:SoundChannel;

        public function playSound():void {
            sndChannel=snd.play();
        }   

        public function stopSound():void {
            sndChannel.stop();
        }   
    ]]>
</mx:Script>

<mx:HBox>
    <mx:Button label="play" click="playSound();"/>
    <mx:Button label="stop" click="stopSound();"/>
</mx:HBox>
</mx:Application>
Run Code Online (Sandbox Code Playgroud)

apache-flex mxml actionscript-3 mxmlc

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

有没有办法让这个功能看起来更好?

我需要一个从Apache日志文件中提取URL的逻辑:现在我这样做了:

apache_log = {'@source': 'file://xxxxxxxxxxxxxxx//var/log/apache2/access.log', '@source_host': 'xxxxxxxxxxxxxxxxxxx', '@message': 'xxxxxxxxxxxxxxx xxxxxxxxxx - - [02/Aug/2013:12:38:37 +0000] "POST /user/12345/product/2 HTTP/1.1" 404 513 "-" "PycURL/7.26.0"', '@tags': [], '@fields': {}, '@timestamp': '2013-08-02T12:38:38.181000Z', '@source_path': '//var/log/apache2/access.log', '@type': 'Apache-access'}
data = apache_log['@message'].split()
if data.index('"POST') and data[data.index('"POST')+2].startswith('HTTP'):
     print data[data.index('"POST')+1] 
Run Code Online (Sandbox Code Playgroud)

它回报我:

/user/12345/product/2
Run Code Online (Sandbox Code Playgroud)

基本上结果是正确的,但我这样做的方式我并不喜欢.

有人可以建议更好(更Pythonic)从apache日志文件中提取此路径的方法.

python

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

Gradle 构建不包括源代码/src groovy

我正在尝试从基本程序创建一个 jar。

  • 我有一个基本的 groovy 项目,即 src/org...../*.groovy 在根目录中
  • 我有以下 build.gradle

    apply plugin: 'groovy'
    version = '1.0'
    
    repositories {
        mavenCentral();
    }
    
    dependencies
    {
        compile files (fileTree(dir: 'lib', include: ['*.jar']),
            fileTree(dir: 'lib/DocxDep', include: ['*.jar']))
    }
    
    task buildLabServicesJar(type: Jar) {
    from files(sourceSets.main.output.classesDir)
    from {
        configurations.compile.collect {
            it.isDirectory() ? it : zipTree(it)
        }
        configurations.runtime.collect {
            it.isDirectory() ? it : zipTree(it)
        }
    }
    
    manifest {
        attributes 'Implementation-Title': 'Lab Services',
            'Implementation-Version': version,
            'Main-Class': 'org.xxx.clarity.ClarityServices'
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

问题是当我运行和/或检查 jar 文件时,我的 src/** sclasses 不包括在内!(所有依赖都是完美的)

这里有什么问题?

更新

当我添加: from files(fileTree(dir: …

groovy jar gradle

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

如何从String创建变量名?

我正在做很多变量,但我想通过while语句来做这个.

问题是我无法弄清楚如何将变量用作变量名的一部分,以便在循环id中创建的变量不会多次创建(从而导致错误).

我有一个像这样的循环:

int index = 0
while (index < 10){
    JLabel A1 = new JLabel("A" + [index]);
    index++;
}
Run Code Online (Sandbox Code Playgroud)

显然我不希望我的所有变量都被称为A1,因为这不是合法的语法.我如何拥有它以使我的变量为A [index]?

java variables recursion while-loop

0
推荐指数
1
解决办法
188
查看次数