在编写校样时,我注意到Agda的自动校对搜索经常找不到对我来说显而易见的解决方案.不幸的是,提出一个小例子,说明问题似乎很难,所以我试着描述最常见的模式.
-m到孔中以使Agda查看模块范围.我可以将该标志设为默认值吗?会有什么缺点?-m,Agda也不会考虑在let或where子句中引入的函数参数或符号.简单地尝试所有这些都有问题吗?let或where子句中引入的符号.为什么?使用auto更有效的其他习惯是什么?
我SpamException在模块中定义了一个异常类spam.现在我想测试一个spam_function引发此异常的函数.所以我写了下面的doctest.
>>> spam_function()
Traceback (most recent call last):
....
SpamException
Run Code Online (Sandbox Code Playgroud)
测试在Python 2.x上成功,但在Python 3.x上测试失败.以下测试适用于Python 3.x.
>>> spam_function()
Traceback (most recent call last):
....
spam.SpamException
Run Code Online (Sandbox Code Playgroud)
这里的显着区别是在异常名称中包含模块名称.那么如何编写适用于Python 2.x和3.x的doctest?
我想对configobj配置文件的值使用解析时间和运行时插值.在Python中进行简单字符串插值的最简单方法是"%(foo)s" % somedict.不幸的是,configobj使用相同的插值机制,我还没有找到逃脱它的方法.理想情况下,我的价值看起来像:
othervar = foo
someconfigobjkey = %(othervar)s %%(runtimevar)s
Run Code Online (Sandbox Code Playgroud)
然而,configobj尝试(并失败)替换第二个变量.回答这个问题的另一种方法是提供一种不同的(configobj)方法来同时进行解析时间和运行时插值.
我有一个
AttributeError: '_MainProcess' object has no attribute '_exiting'
Run Code Online (Sandbox Code Playgroud)
来自Python应用程序.不幸的是,这段代码必须运行Python 2.5,因此processing现在称为模块multiprocessing.我正在做的是从主进程创建一个Process带有a Queue和到put队列中的项目.查看processing.queue代码,我可以看到启动了一个支线线程.然后currentProcess()._exiting,该馈线线程将进行检查,但是在模块中可以看到,currentProcess()评估为_MainProcess没有所述属性的线程processing.process.怎么解决这个?这是一个错误processing吗?如果是的话,我可以简单地使用它进行monkeypatch currentProcess()._exiting = False吗?
最小的例子:
#!/usr/bin/python
import processing
import processing.queue
class Worker(processing.Process):
def __init__(self):
processing.Process.__init__(self)
self.queue = processing.queue.Queue()
def run(self):
element = self.queue.get()
print element
if __name__ == '__main__':
w = Worker()
w.start()
# To trigger the problem, any non-pickleable object is to be passed here.
w.queue.put(lambda x: …Run Code Online (Sandbox Code Playgroud) 我需要腌制一个scapy包.大部分时间都可以使用,但有时候pickler会抱怨一个函数对象.根据经验:ARP数据包泡菜很好.一些UDP数据包存在问题.
在Linux系统上,可以比使用文件功能添加setuid位更有选择性地授予root权限.详情capabilities(7)请见.这些是文件的属性,可以使用该getcap程序读取.如何在Python中检索这些属性?
即使getcap使用例如subprocess用于回答这样的问题来运行程序也是可能的,但是在检索非常多的能力时是不可取的.
应该可以使用设计解决方案ctypes.是否有替代方法或甚至图书馆促进这项任务?
......还有一匹小马!不,真的.我正在寻找一种方法来组织"正常工作"的测试.大多数事情都有效,但并非所有部分都适合.所以这就是我想要的:
python setup.py test工作.我目前的方法涉及tests目录和load_tests协议.包含的所有文件都命名为test_*.py.python -m unittest discover如果我test_doctests.py使用以下内容创建文件,这只会起作用.
import doctest
import mymodule1, mymodule2
def load_tests(loader, tests, ignore):
tests.addTests(doctest.DocTestSuite(mymodule1))
tests.addTests(doctest.DocTestSuite(mymodule2))
return tests
Run Code Online (Sandbox Code Playgroud)
这种方法也有可以使用setuptools和供应的好处setup(test_suite="unittest2.collector").
然而,这种方法存在一些问题.
--doctest-modules选项是crap.load_tests函数,但不提供任何参数.这看起来完全打破了鼻子的一面.如何让事情比这更好或解决上面的一些问题?
通常在大多数 Unix 系统上,$PREFIX/bin和之间有区别$PREFIX/sbin。当安装一个软件时,管理员决定什么$PREFIX是,但作者决定哪些程序适合普通用户,哪些不适合。使用 Python可以定义distutils一组scripts并将它们安装到$PREFIX/bin. 那么如何将脚本安装到对应的sbin目录下呢?
请注意,在这种情况下,欢迎仅针对 Linux 的解决方案,因为相关软件的其他部分依赖于 iptables。
如何针对标准库的多个版本编写Agda代码?
例如Data.Maybe.IsJust,重命名为Data.Maybe.Is-just.同样地Data.Fin.Props转向Data.Fin.Properties.遗憾的是,投入很少的工作来保持向后兼容性,因此即使针对相邻版本也很难实现.像运行cpp作为预处理器这样的常规选项是不方便的,因为它们打破了emacs agda2-mode.
sqlite 事务可以是“延迟”、“立即”或“独占”。默认值为“延迟”,这意味着除非绝对必要,否则不会启动事务。如果并发事务从读取开始然后继续写入,这可能会导致事务中止。可以通过使用立即事务来避免此类中止(以降低性能为代价)。
sqlalchemy 抽象了包括 sqlite 在内的 sql 方言。它还有一个编写交易的模型:
with engine.begin() as connection:
do_something_with_connection
Run Code Online (Sandbox Code Playgroud)
如何告诉 sqlalchemy 这样的事务应该立即进行。或者,如何告诉 sqlalchemy 所有 sqlite 事务都应该是立即的?
python ×7
agda ×2
discovery ×1
distutils ×1
doctest ×1
escaping ×1
exception ×1
installation ×1
linux ×1
pickle ×1
python-2.5 ×1
python-2.x ×1
python-3.x ×1
scapy ×1
sqlalchemy ×1
sqlite ×1
unit-testing ×1