小编dut*_*utt的帖子

用Python替换控制台输出

我想知道如何在Python中创建一个漂亮的控制台计数器,就像在某些C/C++程序中一样.

我有一个循环做事,当前的输出是这样的:

Doing thing 0
Doing thing 1
Doing thing 2
...
Run Code Online (Sandbox Code Playgroud)

什么是最简单的就是让最后一行更新;

X things done.
Run Code Online (Sandbox Code Playgroud)

我在许多控制台程序中看到过这种情况,我想知道是否/如何在Python中执行此操作.

python

85
推荐指数
9
解决办法
7万
查看次数

正则表达式匹配数

我在re模块中使用finditer-function来匹配某些东西,一切正常.

现在我需要找出我有多少匹配,是否可以在没有循环遍历迭代器两次的情况下?(一个找出计数,然后是真实的迭代)

编辑:根据要求,一些代码:

imageMatches = re.finditer("<img src\=\"(?P<path>[-/\w\.]+)\"", response[2])
# <Here I need to get the number of matches>
for imageMatch in imageMatches:
    doStuff
Run Code Online (Sandbox Code Playgroud)

一切正常,我只需要在循环之前获得匹配的数量.

python regex

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

风格android微调器

我试图让我的Android应用程序更时尚,并取得了一些进展,但微调下拉正在给我带来麻烦.我有截图给你看问题:

如何摆脱白色背景

我想要的是背景中的白色框是透明的,就像在后面屏幕上的灰色覆盖图一样,在下拉屏幕之外的屏幕的其余部分.

Android 4.0,API 15,如果我没记错的话.

按照要求,这是我到目前为止的工作方式.这些是我认为相关的片段,但我可能错过了一些东西.

这是微调器的xml:

<Spinner
    android:id="@+id/edit_countrySpinner"
    android:layout_width="0dip"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:entries="@array/edit_countryArray"
    android:gravity="center"
    android:prompt="@string/country_prompt" />
Run Code Online (Sandbox Code Playgroud)

在我的values/style.xml中.如果我在这里更改背景的颜色,对话框中的背景会发生变化,但所有其他背景也会发生变化.我还没弄清楚如何在下拉对话框中改变背景.

<style name="appcin" parent="@android:style/Theme.NoTitleBar.Fullscreen">
    <item name="android:spinnerStyle">@style/spinnerStyle</item>
    <item name="android:spinnerItemStyle">@style/SpinnerItem</item>
    <item name="android:spinnerDropDownItemStyle">@style/SpinnerDropDownItem</item> -->
    <item name="android:background">#FFFFFF</item>
</style>
<style name="spinnerStyle">
    <item name="android:background">@drawable/pink_white_dropdown</item>
    <item name="android:clickable">true</item>
</style>
<style name="SpinnerItem">
    <item name="android:textColor">#993399</item>
    <item name="android:background">@drawable/pink_white_dropdown</item>
    <item name="android:maxHeight">10dip</item>
</style>
<style name="SpinnerDropDownItem">
    <item name="android:textColor">#993399</item>
    <item name="android:background">#FFFFFF</item>
</style>
Run Code Online (Sandbox Code Playgroud)

我已经尝试将此添加到应用主题,但它们没有任何区别,背景仍然是白色的.

<...theme....>
   <item name="android:dropDownListViewStyle">@style/DropDownStyle</item>
   <item name="android:dropDownSpinnerStyle">@style/DropDownStyle</item>
   <item name="android:dropDownSelector">@style/DropDownStyle</item>
</... theme ...>
<style name="DropDownStyle">
    <item name="android:background">#FFF000</item>
    <item name="android:popupBackground">#FFF000</item>
    <item name="android:cacheColorHint">#FFF000</item>
</style>
Run Code Online (Sandbox Code Playgroud)

在drawable/pink_white_dropdown中,只显示所有案例的相同图像.pink_white_arrow是我制作的9patch图像.有很多指南,这是我在谷歌上30秒发现的指南.

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_window_focused="false" …
Run Code Online (Sandbox Code Playgroud)

android

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

加载设置 - 最佳实践

我正在我的第一个真正的应用程序,我在用户设置中添加.我正在使用Java并且非常OO(并试图保持这种方式)所以这是我的想法:

  1. 加载所有内容main()并将其全部"下线"传递给所需的对象(数组)
  2. 与上面相同,但只是传递包含数据的对象
  3. 根据需要在各个类中加载每个单独的设置.

我理解每种方法的一些基本优缺点(即时间与大小),但我正在寻找一些外部输入,以了解他们过去成功使用的实践.

java oop settings

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

在X中获取活动窗口标题

我正在尝试获取活动窗口的标题.该应用程序是一个后台任务,因此如果用户打开Eclipse,该函数将返回"Eclipse - blabla",因此它不会获得我自己窗口的窗口标题.我正在使用PyQt4在Python 2.6中开发它.

我现在的解决方案,从SO的旧答案中借用并略微修改,如下所示:

def get_active_window_title():
    title = ''
    root_check = ''

    root = Popen(['xprop', '-root'],  stdout=PIPE)

    if root.stdout != root_check:
        root_check = root.stdout

        for i in root.stdout:
            if '_NET_ACTIVE_WINDOW(WINDOW):' in i:
                id_ = i.split()[4]
                id_w = Popen(['xprop', '-id', id_], stdout=PIPE)

        for j in id_w.stdout:
            if 'WM_ICON_NAME(STRING)' in j:
                if title != j.split()[2]:
                    return j.split("= ")[1].strip(' \n\"')
Run Code Online (Sandbox Code Playgroud)

它适用于大多数窗口,但不是全部.例如,它找不到我的kopete聊天窗口,或者我正在开发的应用程序的名称.

我的下一次尝试看起来像这样:

def get_active_window_title(self):
    screen = wnck.screen_get_default()
    if screen == None:
        return "Could not get screen"
    window = screen.get_active_window()
    if window == …
Run Code Online (Sandbox Code Playgroud)

python linux pyqt4

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

使用Google协议缓冲区进行CMake

我正在尝试使用cmake来使用协议缓冲区构建我的小项目.

有一个根目录,其中包含许多子目录,其中包含许多库和可执行文件.我的第一个想法是将我的.proto文件放在一个子目录中,但是当我读到这个答案时,我用它创建了一个库.但是当我尝试在我的可执行文件中包含一个消息头时,它无法找到它.

错误信息:

fatal error: msgs.pb.h: No such file or directory
 #include "msgs.pb.h"
                     ^
compilation terminated.
Run Code Online (Sandbox Code Playgroud)

我通过创建一个目录"build"然后从它里面"cmake .. && make"来运行它.我看了,似乎生成的文件放在构建/消息中,所以我可以做include_directories(构建/消息),但这似乎不正确.使用protobuf有没有正确的方法?我希望将消息文件放在自己的文件夹中的原因是它们将被用于许多不同的小型可执行文件中.

任何其他改进我的CMake结构的一般技巧也值得赞赏:)

目录:

root
   messages
   core
   server
Run Code Online (Sandbox Code Playgroud)

根/的CMakeLists.txt:

project(lillebror)
cmake_minimum_required(VERSION 2.8)
cmake_policy(SET CMP0015 NEW)

set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
find_package(Boost COMPONENTS date_time log thread system)
find_package(Protobuf REQUIRED)
if(Boost_FOUND)
    add_definitions(-std=c++11)
    add_subdirectory(messages)
    add_subdirectory(core)
    add_subdirectory(server)
    add_subdirectory(testserver)
endif()
Run Code Online (Sandbox Code Playgroud)

消息/的CMakeLists.txt:

file(GLOB ProtoFiles "${CMAKE_CURRENT_SOURCE_DIR}/*.proto")
PROTOBUF_GENERATE_CPP(ProtoSources ProtoHeaders ${ProtoFiles})
add_library(messages STATIC ${ProtoSources} ${ProtoHeaders})
target_link_libraries(messages ${Boost_LIBRARIES} ${PROTOBUF_LIBRARY})
Run Code Online (Sandbox Code Playgroud)

核心/的CMakeLists.txt:

aux_source_directory(src SRC_LIST)
add_library(core STATIC ${SRC_LIST})
target_link_libraries(core messages ${Boost_LIBRARIES})
Run Code Online (Sandbox Code Playgroud)

服务器/的CMakeLists.txt: …

c++ cmake protocol-buffers

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

用正则表达式检查整个字符串

我正在尝试检查字符串是否为数字,因此正则表达式"\ d +"似乎很好.然而,由于某些原因,正则表达式也符合"78.46.92.168:8000",我不想要,一点点代码:

class Foo():
    _rex = re.compile("\d+")
    def bar(self, string):
         m = _rex.match(string)
         if m != None:
             doStuff()
Run Code Online (Sandbox Code Playgroud)

输入ip地址时调用doStuff().我有点困惑,"怎么样".或":"匹配"\ d"?

python regex

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

将开发从Windows迁移到Linux

我是一个长期的Visual Studio(从版本6到2008)用户,非常喜欢编辑器,尤其是调试器.现在我正在考虑给Linux一个机会,是否有一个具有类似或更好功能的IDE?

我也对GUI库,c ++或c#的建议感兴趣.

c# c++ linux windows visual-studio

12
推荐指数
5
解决办法
1633
查看次数

用于同步的锁的替代方案

我目前正在开发自己的小线程库,主要用于学习目的,并且处于消息队列的一部分,这将涉及在各个地方进行大量同步.以前我主要使用锁,互斥和条件变量,它们都是同一主题的变体,一个锁的一个部分只能由一个线程一次使用.

与使用锁相比,是否有任何不同的同步解决方案?我已经在地方读过无锁同步,但有些人认为将容器中的锁隐藏起来是无锁的,我不同意这一点.你只是不自己明确使用锁.

c++ multithreading locking

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

找不到异常的来源

我试图找到我们的python脚本崩溃的原因.

主要结构是这样的:

def main()
    try:
      dostuff
    except Exception as ex:
      import traceback
      tb = traceback.format_exc()
      import platform
      node = platform.node()
      sendMail([DEBUG_EMAIL], "Alarm exception on %s" % node, str(tb), [])
Run Code Online (Sandbox Code Playgroud)

我在主要的错误处理中得到了这个堆栈跟踪,而不是我应该发送的错误电子邮件.

Traceback (most recent call last):
  File "/usr/lib/python2.6/logging/__init__.py", line 799, in emit
    stream.write(fs % msg.encode("UTF-8"))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 66: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)

从我看到所有对logger的写入调用都在try-block中,但由于它没有在我的电子邮件发送异常块中捕获和处理,所以我似乎错过了一些东西.我已经检查过,sendMail函数根本不使用日志记录模块.所以异常不应该源于我的except-block.

我尝试添加

sys.tracebacklimit = 10
Run Code Online (Sandbox Code Playgroud)

在文件的顶部,查看异常发生的位置但不影响任何内容.而现在我已经没有关于如何找到问题所在的想法.

该脚本每小时运行一次,每周只崩溃一次,这使我认为它与输入数据有关,但这只能由dostuff()处理.

更新:

我已经弄清楚为什么我只得到一行堆栈跟踪.在emit()里面我发现了这个.

        try:
            ... doing stuff, something goes boom with encoding...
        except UnicodeError: …
Run Code Online (Sandbox Code Playgroud)

python

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