小编fan*_*ngo的帖子

读取xterm中的当前文本颜色

我正在编写各种实用程序,我真的很喜欢彩色文本.没有什么好看的,只是使用转义序列.我创建了一个具有pprint(msg,color)函数的简单类.在这里找到代码后,我已经很容易地工作.

我遇到的问题是我应该能够在打印后关闭颜色.例如,假设一个用户运行我的程序,它打印几乎所有的默认终端颜色,但有一个错误,我想以红色打印错误.我的错误消息前缀为'\ 033 [0; 32m',消息为红色.不幸的是,在我更改之前,所有文本都是红色的.在我的程序运行时,这通常很好,因为我知道消息应该是什么颜色.但是,程序结束后颜色仍然存在.基本上,我想在程序启动时读取当前颜色,并在完成后恢复它.与退出时脚本恢复pwd的方式相同.

如何读取当前的转义序列?

系统:Red Hat 5.x Bash Python 2.3

谢谢您的帮助.

python bash xterm

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

将文本传递给Python脚本或提示

我正在尝试在python中编写一个非常简单的电子邮件脚本.这基本上是一个穷人的笨蛋.在工作中,我们从服务器发送大量数据,并且直接从服务器发送它会容易得多.

我坚持的部分是处理消息.我希望用户能够执行以下操作:

$ cat message.txt | emailer.py fandingo@example.com
$ tail -n 2000 /var/log/messages | emailer.py fandingo@example.com
Run Code Online (Sandbox Code Playgroud)

这两个都很容易.我可以sys.stdin.read()获取我的数据.

我遇到的问题是我还想支持输入带有以下用法的消息的提示:

emailer.py --attach-file /var/log/messages fandingo@example.com

Enter Your message. Use ^D when finished.
>>   Steve,
>>   See the attached system log. See all those NFS errors around 2300 UTC today.
>>
>>   ^D
Run Code Online (Sandbox Code Playgroud)

我遇到的麻烦是,如果我尝试sys.stdin.read(),并且没有数据,那么我的程序会阻塞,直到stdin获取数据,但我无法打印我的提示.我可以采取安全的方法而raw_input("Enter Your message. Use ^D when finished.")不是使用stdin.read(),但随后我总是打印提示.

有没有办法看看用户是否在不使用会阻塞的方法的情况下将文本传输到python中?

python bash

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

Python:os.stat().st_size给出的值与du不同

我正在创建一个实用程序,它将遍历目录并获取所有目录的子目录和文件的大小并存储该值.但是,尺寸计算不正确.

这是我的类,它自动递归所有子目录:

class directory:
    '''
    Class that automatically traverses directories
    and builds a tree with size info
    '''
    def __init__(self, path, parent=None):

        if path[-1] != '/':
            # Add trailing /
            self.path = path + '/'
        else:
            self.path = path
        self.size = 4096
        self.parent = parent
        self.children = []
        self.errors = []
        for i in os.listdir(self.path):
            try:
                self.size += os.lstat(self.path + i).st_size
                if os.path.isdir(self.path + i) and not os.path.islink(self.path + i):
                    a = directory(self.path + i, self)
                    self.size += a.size
                    self.children.append(a) …
Run Code Online (Sandbox Code Playgroud)

python linux

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

jQuery Animate()和BackgroundColor

我正在尝试通过使用JQuery更改背景颜色来创建简单的脉冲效果.但是,我无法将backgroundColor设置为动画.

function show_user(dnid) {
    /* dnid is HTML ID of a div. */
    if (! $(dnid).is(':visible')) {
        $(dnid).show()
    }
    $('html, body').animate({scrollTop: $(dnid).offset().top});
    $(dnid).animate({backgroundColor: "#db1a35"}, 1200);
}
Run Code Online (Sandbox Code Playgroud)

奇怪的是,这个替代动画有效:

$(dnid).animate({opacity: "toggle"}, 1200);
Run Code Online (Sandbox Code Playgroud)

但这根本不是我想要的.

此外,函数中的show()和滚动功能正常工作.这只是背景颜色动画.

上面的函数由此链接调用 <a href="#" onclick="javascript:show_user('#9e4cde88b90004ea722e9e129ed83747')">Locate Me</a>

有人可以帮助我设置背景颜色的动画吗?

=========

谢谢大家的帮助.很多类似的答案.这就是我最终的结果

在我的标题中

<script src="http://code.jquery.com/color/jquery.color-2.1.2.min.js"></script>

然后在我的show_user函数之后滚动动画.

var bgcol = $(dnid).css('backgroundColor');
$(dnid).animate({backgroundColor: "#db1a35"}, 2000);
$(dnid).animate({backgroundColor: bgcol}, 2000);
Run Code Online (Sandbox Code Playgroud)

这会产生一个相对快速的红色"脉冲",吸引用户的眼睛.

再一次感谢你的帮助.

javascript css jquery

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

Dbus/GLib主循环,背景线程

我开始使用DBus和事件驱动编程.我正在尝试创建的服务实际上由三部分组成,但其中两部分实际上是"服务器".

1)实际的DBus服务器通过HTTPS与远程网站通信,管理会话,并向客户端传达信息.

2)服务的另一部分每2分钟调用一个保持活动页面,以使会话在外部网站上保持活动状态

3)客户端调用服务以从服务中检索信息.

我找到了一些简单的示例程序.我正在努力使它们适应原型#1和#2.而不是为两者构建单独的程序.我以为我可以在单个双线程进程中运行它们.

我看到的问题是我在保持活动线程中调用time.sleep(X).线程进入睡眠状态,但不会醒来.我认为GIL不会被GLib主循环释放.

这是我的线程代码:

class Keepalive(threading.Thread):
  def __init__(self, interval=60):
    super(Keepalive, self).__init__()
    self.interval = interval
    bus = dbus.SessionBus()
    self.remote = bus.get_object("com.example.SampleService", "/SomeObject")

  def run(self):
    while True:
        print('sleep %i' % self.interval)
        time.sleep(self.interval)
        print('sleep done')
        reply_status = self.remote.keepalive()
        if reply_status:
            print('Keepalive: Success')
        else:
            print('Keepalive: Failure')
Run Code Online (Sandbox Code Playgroud)

从印刷声明中,我知道睡眠开始,但我从未看到"完成睡眠".

这是主要代码:

if __name__ == '__main__':
try:
    dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)

    session_bus = dbus.SessionBus()
    name = dbus.service.BusName("com.example.SampleService", session_bus)
    object = SomeObject(session_bus, '/SomeObject')

    mainloop = gobject.MainLoop()

    ka = Keepalive(15)
    ka.start()
    print('Begin main loop')
    mainloop.run()
except Exception as e:
    print(e) …
Run Code Online (Sandbox Code Playgroud)

python dbus glib

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

3.5:类型提示和方法重载

编辑:我目前误解了该功能。它不是为多次分派而设计的

注意:虽然可以使用此语法提供多分派实现,但它的实现需要使用 sys._getframe() ,这是不受欢迎的。此外,设计和实现高效的多分派机制很困难,这就是为什么以前的尝试被放弃而转而使用 functools.singledispatch() 的原因。(参见 PEP 443 ,尤其是它的“替代方法”一节。)将来我们可能会提出一个令人满意的多分派设计,但我们不希望这样的设计受到为 stub 中的类型提示定义的重载语法的约束文件。这两个特性也有可能彼此独立开发(因为类型检查器中的重载与运行时的多次分派相比具有不同的用例和要求——例如

====

我已经离开 Java 领域有一段时间了,现在我要回到 Python 3.5。我想使用新的类型提示功能,但我在方法重载方面遇到了麻烦。从我对该功能的阅读来看,应该支持这一点。

这是我正在学习的一个快速小类:

licensing.pyi(注意保华)

import typing
import gitlab


class LicensingChecker(object):
    @typing.overload
    def __init__(self, url: str, api_key: str) -> None: ...
    @typing.overload
    def __init__(self, gl: gitlab.Gitlab) -> None: ...

    def iter_projects(self) -> typing.Iterator[str]: ...
Run Code Online (Sandbox Code Playgroud)

许可.py

import gitlab
import string


class LicenseChecker(object):
    def __init__(self, gl):
        self.gl = gl

    def __init__(self, url, api_key):
        self.gl = gitlab.Gitlab(url, api_key)

    def iter_projects(self):
        p = set()
        for i in …
Run Code Online (Sandbox Code Playgroud)

python python-3.5

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

.Service 文件 D-Bus

我正在尝试在客户端程序启动时自动启动 DBus 服务。我已经设置了一个 .service 文件,但它不起作用。

我的服务名称是

org.fandingo.PMP
Run Code Online (Sandbox Code Playgroud)

我使用 python 服务器注册名称

 name = dbus.service.BusName('org.fandingo.PMP', session_bus)
 object = PMPService(session_bus, '/PMPService', PMPProxy())
Run Code Online (Sandbox Code Playgroud)

如果我从客户端手动运行服务器代码,我可以很好地连接到这个

remote = bus.get_object('org.fandingo.PMP', '/PMPService')
Run Code Online (Sandbox Code Playgroud)

因此,如果手动调用,服务器和客户端都可以工作。如果我只是尝试客户端,则会收到以下 Python 异常

dbus.exceptions.DBusException: org.freedesktop.DBus.Error.ServiceUnknown: The name org.fandingo.PMP was not provided by any .service files
Run Code Online (Sandbox Code Playgroud)

这是我的 .service 文件

-rw-r--r--. root root unconfined_u:object_r:usr_t:s0   /usr/share/dbus-1/services/org.fandingo.PMP.service
Run Code Online (Sandbox Code Playgroud)

这些权限和 SELinux 标签与其他 .service 文件相同。

.service 文件内容

[D-Bus Service]
Name=org.fandingo.PMP
Exec=/home/fandingo/code/python/pmp/src/pmpserver.py
User=fandingo
Run Code Online (Sandbox Code Playgroud)

pmpserver.py 是可执行的并且具有正确的shebang。

有没有人看到我的配置有任何问题?

谢谢,

dbus

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

C开发和GTK +入门

我是一个专门的Python开发人员,但我现在正在进行C编程,我开始时遇到了很多麻烦.我似乎无法掌握编译和包括库.此时,我只是确定了我需要的库,并尝试使用基本的"hello,world"应用程序编译它们,以确保我的环境设置可以进行实际的编程.

这是一个DBus后端应用程序,它将使用GIO连接到DBus.

#include <stdlib.h>
#include <gio/gio.h>

int 
main (int argc, char *argv[])
{
    printf("hello, world");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

然后,我尝试编译:

~$ gcc main.c
main.c:2:21: fatal error: gio/gio.h: No such file or directory
 #include <gio/gio.h>
Run Code Online (Sandbox Code Playgroud)

我相信,我已经安装了正确的软件包指示在这里,并在gio.h存在/usr/include/glib-2.0/gio/gio.h.

我在网上发现了一个向gcc添加搜索目录的命令,但是这导致了其他错误:

~$ gcc -I /usr/include/glib-2.0/ main.c 
In file included from /usr/include/glib-2.0/glib/galloca.h:34:0,
                 from /usr/include/glib-2.0/glib.h:32,
                 from /usr/include/glib-2.0/gobject/gbinding.h:30,
                 from /usr/include/glib-2.0/glib-object.h:25,
                 from /usr/include/glib-2.0/gio/gioenums.h:30,
                 from /usr/include/glib-2.0/gio/giotypes.h:30,
                 from /usr/include/glib-2.0/gio/gio.h:28,
                 from main.c:2:
/usr/include/glib-2.0/glib/gtypes.h:34:24: fatal error: glibconfig.h: No such file or directory
 #include <glibconfig.h>
                        ^
compilation terminated.
Run Code Online (Sandbox Code Playgroud)

必须有一些相对简单的方法才能设置一些选项/变量(makefile?)来自动包含必要的标题.我还将使用Eclipse-CDT或Anjuta作为IDE,并希望能够帮助修复导入路径(或者在C中调用它).

任何帮助是极大的赞赏.

gtk gcc

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

Puppet无法找到模板的变量

刚刚开始使用Puppet,我的第一个模板出现问题.它应该很容易,但我无法弄清楚.

我有一个模块"基地"

/etc/puppet/modules/base/
    ./manifests
    ./manifests/service.pp
    ./manifests/init.pp
    ./manifests/params.pp
    ./manifests/config.pp
    ./manifests/install.pp
    ./templates
    ./templates/puppet.conf.erb
Run Code Online (Sandbox Code Playgroud)

还有其他的东西,但没有必要.

碱/舱单/ init.pp:

class base {
  include base::install, base::service, base::config, base::params
}
Run Code Online (Sandbox Code Playgroud)

碱/舱单/ config.pp

class base::config {
  include base::params

  File {
    require => Class["base::install"],
    ensure => present,
    owner => root,
    group => root,
  }

  file { "/etc/puppet/puppet.conf":
    mode => 0644,
    content => template("base/puppet.conf.erb"),
    require => Class["base::install"],
    nofity => Service["puppet"],
  }
...
Run Code Online (Sandbox Code Playgroud)

碱/舱单/ params.pp

class base::params {
  $puppetserver = "pup01.sdirect.lab"
}
Run Code Online (Sandbox Code Playgroud)

最后是base/templates/puppet.conf.erb中模板的有趣部分

...
server=<% puppetserver %>
Run Code Online (Sandbox Code Playgroud)

错误消息:

错误:无法解析模板base/puppet.conf.erb:无法在节点上的/etc/puppet/modules/base/manifests/config.pp:13找到'puppetserver'的值...

我不知道问题是什么.我直接从Pro Puppet书中复制了这部分内容. …

puppet

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

在Python中逃避str

哇,这应该是这么简单,但它只是不起作用.我需要将一个"\"插入一个字符串(对于一个Bash命令),但是转义只是不起作用.

>>> a = 'testing'
>>> b = a[:3] + '\' + a[3:]
    >>> File "<stdin>", line 1
    >>> b = a[:3] + '\' + a[3:]
                              ^
   >>>SyntaxError: EOL while scanning string literal
>>> b = a[:3] + '\\' + a[3:]
>>> b
'tes\\ting'
>>> sys.version
'2.7 (r27:82500, Sep 16 2010, 18:02:00) \n[GCC 4.5.1 20100907 (Red Hat 4.5.1-3)]' 
Run Code Online (Sandbox Code Playgroud)

第一个错误是可以理解和被驱逐的.最后的报价正在被吃掉,而翻译也是barfs.但是,第二个例子应该有效.为什么有两个斜杠?

Python 2.7

谢谢,

编辑:谢谢格雷格.在翻译工作而不使用repr(b)是一个问题.Python工作正常,但我没有看到正确的输出版本.

python

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

标签 统计

python ×6

bash ×2

dbus ×2

css ×1

gcc ×1

glib ×1

gtk ×1

javascript ×1

jquery ×1

linux ×1

puppet ×1

python-3.5 ×1

xterm ×1