小编Rei*_*ica的帖子

Python - 暂时修改当前进程的环境

我使用以下代码临时修改环境变量.

@contextmanager
def _setenv(**mapping):
    """``with`` context to temporarily modify the environment variables"""
    backup_values = {}
    backup_remove = set()
    for key, value in mapping.items():
        if key in os.environ:
            backup_values[key] = os.environ[key]
        else:
            backup_remove.add(key)
        os.environ[key] = value

    try:
        yield
    finally:
        # restore old environment
        for k, v in backup_values.items():
            os.environ[k] = v
        for k in backup_remove:
            del os.environ[k]
Run Code Online (Sandbox Code Playgroud)

with上下文主要用于测试用例.例如,

def test_myapp_respects_this_envvar():
    with _setenv(MYAPP_PLUGINS_DIR='testsandbox/plugins'):
        myapp.plugins.register()
        [...]
Run Code Online (Sandbox Code Playgroud)

我的问题:是否有简单/优雅的写作方式_setenv?我想过实际上做backup = os.environ.copy(),然后os.environ = backup..但我不知道是否会影响程序行为(例如:如果os.environ引用在Python解释器在其他地方).

python environment-variables

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

Postgres Hstore vs. Redis - 性能明智

读到了 Postgres中的HStores,也是Redis提供的东西.

我们的应用程序是用NodeJS编写的.两个问题:

  • 性能方面,Postgres HStore与Redis相当吗?

  • 对于会话存储,你会推荐什么 - Redis,或Postgres与其他类型的数据类型(如HStore,或者甚至是通常的关系表)?一个选项与另一个选项有多糟糕?

另一个限制是,我们需要使用已经在PostgreSQL中的数据并将其与活动会话(我们不确定此时存储在哪里,如果在Redis或PostgreSQL中)相结合.

根据我们已经阅读的内容,我们已经指出使用Redis作为会话管理器,但由于PostgreSQL约束,我们不确定如何将两者结合起来以及可能出现的性能问题.

谢谢!

postgresql performance redis key-value-store node.js

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

Python - tempfile.TemporaryFile无法读取; 为什么?

TemporaryFile官方文档如下:

mode参数默认为'w + b',因此可以在不关闭的情况下读取和写入创建的文件.

但是,以下代码无法按预期工作:

import tempfile

def play_with_fd():
    with tempfile.TemporaryFile() as f:
        f.write('test data\n')
        f.write('most test data\n')

        print 'READ:', f.read()

        f.write('further data')

        print 'READ:', f.read()

        f.write('even more')
        print 'READ:', f.read()

        print 'READ:', f.read()
        print 'READ:', f.read()

if __name__ == '__main__':
    play_with_fd()
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

> python play.py 
READ: 
READ: 
READ: 
READ: 
READ: 
Run Code Online (Sandbox Code Playgroud)

谁能解释这种行为?有没有办法从临时文件中读取?(无需使用不会自动删除文件的低级mkstemp;而且我不关心命名文件)

python io file temporary-files

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

多个grep搜索/忽略模式

我通常使用以下管道来搜索特定的搜索字符串,但忽略某些其他模式:

grep -Ri 64 src/install/ | grep -v \.svn | grep -v "file"| grep -v "2\.5" | grep -v "2\.6"
Run Code Online (Sandbox Code Playgroud)

这可以简洁地实现吗?我正在使用GNU grep 2.5.3.

unix shell command-line grep

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

clojure lein:如何在项目的其他目录中包含源代码?

我在一个目录中有一个lein项目,而不是使用运行时下载的.jar

> lein deps
Run Code Online (Sandbox Code Playgroud)

我想使用克隆的github存储库中的源代码(它最近的修复程序不在当前的jar中).用leiningen做这个规范的方法是什么?

这是我的项目文件:

(defproject oroboros "1.0.0-SNAPSHOT"
  :description "FIXME: write description"
  :dependencies [[org.clojure/clojure "1.2.1"]
                 [org.clojure/clojure-contrib "1.2.0"]
                 [clojure-source "1.2.1"]
                 [overtone "0.3.0"]
                 [penumbra "0.6.0-SNAPSHOT"]]
  :native-dependencies [[penumbra/lwjgl "2.4.2"]]
  :dev-dependencies [[native-deps "1.0.5"]
                     [swank-clojure "1.4.0-SNAPSHOT"]])
Run Code Online (Sandbox Code Playgroud)

我想使用来自github的泛音回复,而不是来自clojars的回复.

https://github.com/overtone/overtone

这可能吗?

dependencies github clojure leiningen

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

python win32扩展文档

我是python和python win32扩展的新手,可以在http://python.net/crew/skippy/win32/上找到,但是我无法在线或在安装目录中找到任何关于win32扩展提供的文档.这些信息在哪里?

python documentation pywin32

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

在Python中通过sys.stdout编写unicode字符串

假设一个人不能使用print(从而享受自动编码检测的好处).所以这让我们失望了sys.stdout.但是,如果不做任何明智的编码sys.stdout是如此愚蠢.

现在,您可以阅读Python维基页面PrintFails并尝试以下代码:

$ python -c 'import sys, codecs, locale; print str(sys.stdout.encoding); \
  sys.stdout = codecs.getwriter(locale.getpreferredencoding())(sys.stdout);
Run Code Online (Sandbox Code Playgroud)

然而,这也不起作用(至少在Mac上).太明白为什么:

>>> import locale
>>> locale.getpreferredencoding()
'mac-roman'
>>> sys.stdout.encoding
'UTF-8'
Run Code Online (Sandbox Code Playgroud)

(UTF-8是终端理解的).

所以将上面的代码更改为:

$ python -c 'import sys, codecs, locale; print str(sys.stdout.encoding); \
  sys.stdout = codecs.getwriter(sys.stdout.encoding)(sys.stdout);
Run Code Online (Sandbox Code Playgroud)

现在,unicode字符串被正确发送到sys.stdout终端上并在终端上正确打印(sys.stdout连接到终端).

这是编写unicode字符串的正确方法sys.stdout还是我应该做的其他事情?

编辑:有时 - 比如说,当输出到less- 时sys.stdout.encoding将是None.在这种情况下,上面的代码将失败.

python unicode macos terminal stdout

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

Komodo Edit and Notepad ++ ::: Pros&Cons ::: Python dev

我正在使用Notepad ++进行python开发,几天前我发现了免费的Komodo Edit.

我需要这两位编辑之间的Python开发优点和缺点......

python editor komodo notepad++ komodoedit

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

使android Python服务在挂起状态下运行

这是我使用android-scripting编写的 Python 脚本:

import android, time

droid = android.Android()
interval = 1 # every 1 minute

while True:
    # define your own vibrate pattern here
    droid.vibrate(200)
    time.sleep(0.3)
    droid.vibrate(300)

    time.sleep(60*interval)
Run Code Online (Sandbox Code Playgroud)

它基本上每分钟振动(像一个激励者).但是,当手机被锁定并屏幕消失时,我感觉不到任何振动.也许Android正在冻结脚本(因此是while循环)?请注意,我确实将此脚本作为服务运行(长按并单击"作为服务启动").

有没有办法让这个脚本一直工作,无论电话暂停状态如何?

更新1:我确实偶尔会听到振动,而不是每分钟......但是每隔5-10分钟就会随机听到.

更新2:如果我正常运行脚本(而非作为服务),则会出现此问题.似乎"time.sleep"在指定时间内没有睡眠.

python android android-scripting

15
推荐指数
2
解决办法
5249
查看次数

对于Euler 50的等效解决方案,为什么Clojure比Python慢​​10倍?

我最近开始学习Clojure并决定练习Euler问题,以获取可用数据结构并练习递归和循环.

我尝试了问题50的各种方法,但不管我做了什么,找到1000000的解决方案从未完成.在我查看其他人所做的事情之后,我猜想我所做的事情也不应该永远消失,所以我在Python中输入等效算法来查看问题是否是我对某些Clojure事物或Java设置缺乏了解.Python在10秒内完成.对于低于100000的素数,Python版本在0.5秒内完成,Clojure在5秒内完成.

我发布了专门为匹配Python代码而创建的Clojure版本.你能帮我理解为什么性能会有这么大差异吗?我应该使用unchecked-add,输入提示,原语(但在哪里?)或什么?

所以这是Clojure:

(defn prime? [n]
  (let [r (int (Math/sqrt n))]
    (loop [d 2]
      (cond
        (= n 1) false
        (> d r) true
        (zero? (rem n d)) false
        :other (recur (inc d))))))

(defn primes []
  (filter prime? (iterate inc 2)))


(defn cumulative-sum [s]
  (reduce 
    (fn [v, x] (conj v (+ (last v) x))) 
    [(first s)] 
    (rest s)))


(defn longest-seq-under [n]
  "Longest prime seq with sum under n"
  (let [ps (vec (take-while #(< % n) (primes))) ; prime …
Run Code Online (Sandbox Code Playgroud)

python comparison performance clojure

15
推荐指数
2
解决办法
3624
查看次数