我有一个基于Flask的webapp,当以某种方式发布到他们的父文档时偶尔会创建带有新随机密钥的新文档.新密钥进入父级的数据结构,更新的父级临时存储在会话中,并且在成功保存子文档后,存储的父级被拉出会话并存储在一起,以便将两者链接在一起.这是针对某些类型的关系完成的,其中一个人希望在键之间具有固有顺序,因此键被存储为父项上的列表.
现在,当我想使用Werkzeug提供的单元测试客户端进行单元测试时,问题出现了.做一个
ret = self.test_client.post(
request_path,
data=data,
follow_redirects=True
)
Run Code Online (Sandbox Code Playgroud)
在测试用例对象中将成功使用新密钥重定向到子文档 - 但我不知道在单元测试中检索此新密钥的位置.我无法在返回值的顶部找到一个属性,该属性将指示它被重定向到的位置.dir(ret)给我
['__call__', '__class__', '__delattr__', '__dict__', '__doc__', '__enter__', '__exit__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_ensure_sequence', '_get_mimetype_params', '_on_close', '_status', '_status_code', 'accept_ranges', 'add_etag', 'age', 'allow', 'autocorrect_location_header', 'automatically_set_content_length', 'cache_control', 'calculate_content_length', 'call_on_close', 'charset', 'close', 'content_encoding', 'content_language', 'content_length', 'content_location', 'content_md5', 'content_range', 'content_type', 'data', 'date', 'default_mimetype', 'default_status', 'delete_cookie', 'direct_passthrough', 'expires', 'force_type', 'freeze', 'from_app', 'get_app_iter', 'get_data', 'get_etag', 'get_wsgi_headers', 'get_wsgi_response', 'headers', 'implicit_sequence_conversion', 'is_sequence', 'is_streamed', 'iter_encoded', 'last_modified', 'location', …Run Code Online (Sandbox Code Playgroud) 我一直在我的脚本中使用这样的简单bash前导码:
#!/bin/bash
set -e
Run Code Online (Sandbox Code Playgroud)
与模块化/使用功能相结合,这使我今天感到困惑.
所以,说我有一个像某个地方的功能
foo() {
#edit: some error happens that make me want to exit the function and signal that to the caller
return 2
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望能够使用多个小文件,将其功能包含在其他文件中,然后调用这些函数
set +e
foo
rc=$?
set -e
Run Code Online (Sandbox Code Playgroud)
.这适用于两层例程.但是如果foo也调用这样的子程序,返回前的最后一个设置将是set -e,这将使脚本在返回时退出 - 我无法在调用函数中覆盖它.所以,我必须做的是
foo() {
#calling bar() in a shielded way like above
#..
set +e
return 2
}
Run Code Online (Sandbox Code Playgroud)
我发现它非常违反直觉(也不是我想要的 - 如果在某些情况下我想使用该函数而不屏蔽失败,而在其他情况下我想要处理清理?)什么是处理这个问题的最佳方法?顺便说一句.我在OSX上这样做,我还没有测试过Linux上的这种行为是否有所不同.
> git gc --aggressive --prune=now
Counting objects: 68752, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (66685/66685), done.
fatal: sha1 file '.git/objects/pack/tmp_pack_cO6T53' write error: No space left on device
Run Code Online (Sandbox Code Playgroud)
叹了口气,好的
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 19G 15G 3.0G 84% /
udev 485M 4.0K 485M 1% /dev
tmpfs 99M 296K 99M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 494M 0 494M 0% /run/shm
cgroup 494M 0 494M 0% /sys/fs/cgroup
Run Code Online (Sandbox Code Playgroud)
看起来并不那么糟糕
ls …Run Code Online (Sandbox Code Playgroud) 我对于在分支方面理论上掩蔽可以做什么感到困惑.假设我有一个Skylake-SP(哈,我希望......),我们忽略了编译器功能,理论上可能的是:
如果分支条件依赖于静态标志,并且所有分支都将数组设置为计算结果,假设编译器不将其优化为两个单独的循环,它是否可以向量化?
do i = 1, nx
if (my_flag .eq. 0) then
a(i) = b(i) ** 2
else
a(i) = b(i) ** 3
end if
end do
Run Code Online (Sandbox Code Playgroud)
如果仅作为分支的子集设置有问题的值,它可以矢量化吗?
do i = 1, nx
if (my_flag .eq. 0) then
a(i) = b(i) ** 2
end if
end do
Run Code Online (Sandbox Code Playgroud)
如果分支条件本身依赖于矢量数据,它可以矢量化吗?
do i = 1, nx
if (c(i) > 0) then
a(i) = b(i) ** 2
else
a(i) = b(i) ** 3
end if
end do
Run Code Online (Sandbox Code Playgroud) pcregrep 中的 -oX 选项有问题。使用不同的数字指定多个此类选项仅输出最后指定的捕获组。
数据:
docker ps | awk '{print $1}' | tail -n +2 | xargs docker inspect
输出:
[{
"ID": "4e7f430263c33c25970134760ea96f9b57452680a8cfdf062270f5f7fe385135",
.... #lots of additional lines
"Ports": {
"5000/tcp": [
{
"HostIp": "127.0.0.1",
"HostPort": "5000"
}
],
"5984/tcp": [
{
"HostIp": "127.0.0.1",
"HostPort": "5984"
}
]
}
},{
#same as above, but with a different ID and HostPort 5000
}]
Run Code Online (Sandbox Code Playgroud)
想法
docker ps | awk '{print $1}' | tail -n +2 | xargs docker inspect | pcregrep -M …
假设我有
my_dict = {
("airport", "London"): "Heathrow",
("airport", "Tokyo"): "Narita",
("hipsters", "London"): "Soho"
}
Run Code Online (Sandbox Code Playgroud)
什么是有效(不扫描所有键)但优雅的方式来从这个字典中获取所有机场,即预期输出["Heathrow", "Narita"]。在可以按元组索引的数据库中,通常可以执行以下操作
airports = my_dict.get(("airport",*))
Run Code Online (Sandbox Code Playgroud)
(但通常只有“星星”位于元组中最右侧的位置,因为索引通常仅按一种顺序存储)。
由于我想象 Python 以类似的方式使用元组键索引字典(使用键的固有顺序),我想可能有一种方法可以用来以这种方式对索引进行切片?
编辑 1:添加了预期输出
Edit2:删除了最后一个短语。在条件中添加了“(不扫描所有键)”以使其更清晰。
我找不到足够的文档来让它工作。我有非长时间运行的进程,它们在 stderr 上显示进度信息并使用 stdout 进行输出。我想要的是当进程退出时所有的日志消息都在最后整理出来,而且它也应该记录到一个文件中。从我可以在文档中找到,MemoryHandler而且FileHandler是我所需要的。但是当我像下面这样设置时,我没有得到任何输出,无论是在文件中还是在退出时。任何帮助,将不胜感激。
import logging, logging.handlers, atexit, sys
filename = 'mylogfile.txt'
logLevel = logging.DEBUG
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
streamhandler = logging.StreamHandler(sys.stderr)
streamhandler.setLevel(logLevel)
streamhandler.setFormatter(formatter)
memoryhandler = logging.handlers.MemoryHandler(1024*100, logLevel, streamhandler)
filehandler = logging.FileHandler(filename)
filehandler.setLevel(logLevel)
filehandler.setFormatter(formatter)
logger = logging.getLogger()
logger.addHandler(memoryhandler)
logger.addHandler(filehandler)
def flush():
memoryhandler.flush()
atexit.register(flush)
logger.debug("Logger has Initialized")
Run Code Online (Sandbox Code Playgroud)