小编pau*_*ies的帖子

监控Rsync进度

我正在尝试编写一个Python脚本来监视rsync传输,并提供(粗略)估计百分比进度.对于我的第一次尝试,我查看了一个rsync --progress命令,看到它打印的消息如下:

1614 100%    1.54MB/s    0:00:00 (xfer#5, to-check=4/10)

我为这样的消息编写了一个解析器,并使用to-check部分来产生一个百分比进度,在这里,这将完成60%.

但是,这有两个缺陷:

  • 在大转移中,检查分数的"分子"似乎没有单调减少,因此百分比完整性可以向后跳跃.
  • 不会为所有文件打印此类消息,这意味着进度可以向前跳转.

我已经看过要使用的其他消息替代方案,但还没有设法找到任何东西.有没有人有任何想法?

提前致谢!

python rsync progress

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

Scala构造函数弃用

我在Scala中有一个类,它目前以标准方式构建:

class Test( int : Int )
{
    override def toString() = "Test: %d".format( int ) 
}
Run Code Online (Sandbox Code Playgroud)

但是,我想通过伴侣对象转移到间接构建.由于我正在修改的库被其他人使用,我不想直接将构造函数设为私有.相反,我想弃用它,然后在人们有机会改变其使用情况后回来并将其设为私有.所以我修改了我的代码:

object Test
{
    def apply( int : Int ) = new Test( int )
}

@deprecated( "Don't construct directly - use companion constructor", "09/04/13" )
class Test( int : Int )
{
    override def toString() = "Test: %d".format( int ) 
}
Run Code Online (Sandbox Code Playgroud)

但是,这会弃用整个班级.

scala> Test( 4 )
<console>:10: warning: class Test in package foo is deprecated: Don't construct directly - use companion constructor …
Run Code Online (Sandbox Code Playgroud)

constructor annotations scala deprecated

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

Scala导入多个包

我在他们自己的包中有一些Scala类和对象.每个包都有一个包定义一些含义的包对象,因此例如import com.foo.bar._bar包中导入所有含义和类

我想知道的是,有没有办法定义一个"伞"导入com.foo.all,比如这样

import com.foo.all._
Run Code Online (Sandbox Code Playgroud)

相当于

import com.foo.bar._
import com.foo.baz._
import com.foo.qux._
...
Run Code Online (Sandbox Code Playgroud)

我可以理解这可能有点不清楚,但如果我考虑我拥有大量自己的包的情况,这显然会更简洁.

scala package

7
推荐指数
2
解决办法
9014
查看次数

Scala条件列表构造

我正在使用Scala 2.9.2,并希望根据某些条件构建一个列表.

考虑以下内容,其中cond是一些函数,它采用谓词p和类型T的值(在本例中为t3):

t1 :: t2 :: cond( p, t3 ) :: t4
Run Code Online (Sandbox Code Playgroud)

我想要的行为如下.如果p为真,则应该给出:

List[T]( t1, t2, t3, t4 )
Run Code Online (Sandbox Code Playgroud)

如果p的计算结果为false,则应该给出:

List[T]( t1, t2, t4 )
Run Code Online (Sandbox Code Playgroud)

我可能完全以错误的方式思考这个问题,但我很难想出一个优雅的解决方案.我可以在任何地方参与选项然后过滤,但这会使代码更难以阅读:

def cond[T]( p : => Boolean, v : T ) : Option[T] =
{
    p match
    {
        case true => Some( v )
        case false => None
    }
}
Run Code Online (Sandbox Code Playgroud)

这允许以下内容:

scala> ( Some( 1 ) :: Some( 2 ) :: cond( true, 3 ) :: Some( 4 ) :: Nil ).flatten
res4: List[Int] …
Run Code Online (Sandbox Code Playgroud)

collections scala

7
推荐指数
3
解决办法
4917
查看次数

PyQt中的线程和信号问题

我在PyQt中的Threads之间进行通信时遇到了一些问题.我正在使用信号在两个线程,发送者和监听器之间进行通信.发送方发送消息,预计将由侦听器接收.但是,没有收到任何消息.任何人都可以建议可能出错的地方?我敢肯定它一定很简单,但我一直在寻找几个小时但没找到任何东西.提前致谢!

from PyQt4 import QtCore,QtGui
import time

class Listener(QtCore.QThread):    
    def __init__(self):
        super(Listener,self).__init__()

    def run(self):
        # just stay alive, waiting for messages
        print 'Listener started'
        while True:
            print '...'
            time.sleep(2)

    def say_hello(self):
        print ' --> Receiver: Hello World!'

class Sender(QtCore.QThread):
    # a signal with no arguments
    signal = QtCore.pyqtSignal()

    def __init__(self):
        super(Sender,self).__init__()
        # create and start a listener
        self.listener = Listener()
        self.listener.start()
        # connect up the signal
        self.signal.connect(self.listener.say_hello)
        # start this thread
        self.start()

    def run(self):
        print 'Sender starting'
        # send five …
Run Code Online (Sandbox Code Playgroud)

python multithreading signals pyqt

6
推荐指数
2
解决办法
9376
查看次数

SBT TaskKey If Statement

我正在使用SBT 0.13.我遇到了一个问题,以下玩具示例展示了这个问题:

lazy val nativeOne = TaskKey[Unit]( "nativeOne", "One" )
lazy val nativeTwo = TaskKey[Unit]( "nativeTwo", "Two" )

lazy val testProj = Project(
    id = "testProj",
    base = file( "." ),
    settings = Defaults.defaultSettings ++ Seq(
        scalaVersion := "2.10.2",
        nativeOne :=
        {
            println( "Native one"
        },  
        nativeTwo :=
        {
            if ( true )
            {
                println( "Native two" )
            }
            else
            {
                val n1 = nativeOne.value
            }
        }
    )
)
Run Code Online (Sandbox Code Playgroud)

如果我进入sbt并运行nativeTwo:

> nativeTwo
Native one
Native two
Run Code Online (Sandbox Code Playgroud)

为什么会这样?为什么要对false …

if-statement sbt

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

如何正确覆盖(实现)参数化超级特征中定义的方法?

在Scala中,我正在尝试生成一组通用的检查来运行某些数据.

我的基本特征看起来像这样:

trait Check[T]
{
    def complete() : Boolean = ...

    def passed() : Boolean = ...

    def update[T]( data : T ) : Unit
}
Run Code Online (Sandbox Code Playgroud)

然后我有两个子特征,看起来有点像这样:

trait CheckFoo extends Check[Foo]{ val baz = 1 }

trait CheckBar extends Check[Bar]{ val baz = 2 }
Run Code Online (Sandbox Code Playgroud)

这是为了避免我在每个Foo和Bar检查中定义baz.

然后我有一些实际的Foo检查,例如

class CheckFooOne extends CheckFoo
{
    def update( data : Foo ) : Unit = ...
}
Run Code Online (Sandbox Code Playgroud)

但是这不会编译:它告诉我CheckFooOne必须是抽象的,因为没有定义方法更新.

我做错了什么?我确信我错过了一些微妙之处.我很抱歉,如果还有这样的问题,但是我想不出要搜索的内容,而且我已经毫无欢乐地查看了类似问题的列表.

inheritance scala traits

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