我使用以下代码临时修改环境变量.
@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解释器在其他地方).
我读到了 Postgres中的HStores,也是Redis提供的东西.
我们的应用程序是用NodeJS编写的.两个问题:
性能方面,Postgres HStore与Redis相当吗?
对于会话存储,你会推荐什么 - Redis,或Postgres与其他类型的数据类型(如HStore,或者甚至是通常的关系表)?一个选项与另一个选项有多糟糕?
另一个限制是,我们需要使用已经在PostgreSQL中的数据并将其与活动会话(我们不确定此时存储在哪里,如果在Redis或PostgreSQL中)相结合.
根据我们已经阅读的内容,我们已经指出使用Redis作为会话管理器,但由于PostgreSQL约束,我们不确定如何将两者结合起来以及可能出现的性能问题.
谢谢!
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;而且我不关心命名文件)
我通常使用以下管道来搜索特定的搜索字符串,但忽略某些其他模式:
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.
我在一个目录中有一个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
这可能吗?
我是python和python win32扩展的新手,可以在http://python.net/crew/skippy/win32/上找到,但是我无法在线或在安装目录中找到任何关于win32扩展提供的文档.这些信息在哪里?
假设一个人不能使用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.在这种情况下,上面的代码将失败.
我正在使用Notepad ++进行python开发,几天前我发现了免费的Komodo Edit.
我需要这两位编辑之间的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"在指定时间内没有睡眠.
我最近开始学习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 ×7
clojure ×2
performance ×2
android ×1
command-line ×1
comparison ×1
dependencies ×1
editor ×1
file ×1
github ×1
grep ×1
io ×1
komodo ×1
komodoedit ×1
leiningen ×1
macos ×1
node.js ×1
notepad++ ×1
postgresql ×1
pywin32 ×1
redis ×1
shell ×1
stdout ×1
terminal ×1
unicode ×1
unix ×1