我有一个程序将内存中的安全敏感信息(如私钥)保存在内存中,因为它在程序的生命周期内使用它们.此程序的生产版本将RLIMIT_CORE设置为0,以确保永远不会生成可能包含此敏感信息的核心转储.
但是,虽然在core(8)联机帮助页中没有提到这一点,但Ubuntu维基上的apport文档声称,
请注意,即使ulimit设置为禁用核心文件(通过使用ulimit -c 0指定核心文件大小为零),apport仍将捕获崩溃.
我的流程中是否存在一种方式(即,不依赖于外部系统的配置),我可以确保永远不会生成我的流程的核心转储?
注意:我知道有很多方法(例如下面的评论中提到的方法),具有root或进程所有者权限的用户仍然可以访问敏感数据.我的目标是通过将敏感数据保存到磁盘,发送到Ubuntu错误跟踪系统或类似的东西来防止无意中暴露敏感数据.(感谢Basile Starynkevitch明确表示这一点.)
不经常,人们希望<=>在产品数据类型上实现(比较或"太空船")运算符,即具有多个字段的类(所有这些(我们希望!)已经<=>实现),比较某些字段订购.
def <=>(o)
f1 < o.f1 && (return -1)
f1 > o.f1 && (return 1)
f2 < o.f2 && (return -1)
f2 > o.f2 && (return 1)
return 0
end
Run Code Online (Sandbox Code Playgroud)
这既繁琐又容易出错,尤其是在很多领域.它容易出错,我经常觉得我应该对这个功能进行单元测试,这只会增加乏味和冗长.
Haskell提供了一种特别好的方法:
import Data.Monoid (mappend)
import Data.Ord (comparing)
-- From the standard library:
-- data Ordering = LT | EQ | GT
data D = D { f3 :: Int, f2 :: Double, f1 :: Char } deriving Show
compareD :: D -> D -> Ordering … Phil Bagwell在其2002年关于VList数据结构的论文中指出,您可以使用VList来实现持久性哈希表.然而,他对如何运作的解释并没有包含太多细节,我也不理解.谁能给我一个更详细的解释,甚至是例子?
此外,在我看来,我可以看到这个数据结构,虽然它可能具有与Hashtable相同的大O复杂性,但它会更慢,因为它会进行额外的查找.是否有人关心如何慢慢地进行详细分析,最好包括缓存行为?在没有碰撞或多次碰撞的情况下,两者之间的绩效关系如何变化?
complexity-theory haskell functional-programming hashtable data-structures
我在Ubuntu 14.04上使用Git版本1.9.1.
我已经core.autocrlf在一个带有DOS格式和Unix格式文件的新repo中测试了这种行为,并确认git add使用autocrlf=truedo,正如预期的那样,LF will be replaced by CRLF in ...为Unix格式文件生成一条警告:消息,并且在任何文件时都不生成消息autocrlf=false.(在这种情况下,我不清楚为什么它决定在回购中使用DOS行结尾而不是Unix行,但我不确定这在哪里很重要.)
然而,在另一个回购中,尽管有autocrlf=true,它一直告诉我它将转换一些文件:
$ git config core.autocrlf
false
$ git add lib/node_modules/pulp/node_modules/webpack/node_modules/webpack-core/node_modules/source-list-map/test/fixtures/from-to-tests/null-source.input.map
warning: CRLF will be replaced by LF in lib/node_modules/pulp/node_modules/webpack/node_modules/webpack-core/node_modules/source-list-map/test/fixtures/from-to-tests/null-source.input.map.
The file will have its original line endings in your working directory.
$
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚为什么这样做.我正在寻找问题的解释或如何调试它的线索.
补充说明:
.gitattributes回购中没有文件.但它提出了一个有趣的观点,如果autocrlf设置为false会有所不同吗?使用importlib,“元路径查找器”(通过sys.meta_path遍历发现)和“路径条目查找器”(通过sys.path_hooks遍历发现)有什么区别?
第一种类型在导入开始时被调用,但是第二种类型何时使用?两者都返回规格对象吗?
我要实现自定义导入,可以从* .py或* .pyc以外的其他来源(例如,从流)导入模块。如何才能做到这一点?
我正在尝试使用Pytest测试一个较大的项目(〜100k LOC,1k个文件),最终我还有其他几个类似的项目。这不是标准的Python包 ; 它是高度定制的系统的一部分,至少在短期内,我几乎无权更改。测试模块与代码集成在一起,而不是放在单独的目录中,这对我们很重要。配置与此问题相当相似,我在那里的回答也可能提供有用的背景。
我遇到的问题是,这些项目几乎只使用PEP 420隐式名称空间包;也就是说,__init__.py任何软件包目录中几乎没有文件。我还没有看到必须将其作为名称空间软件包的情况,但是鉴于此项目与其他也具有Python代码的项目结合在一起,这种情况可能会发生(或者已经发生,而我只是没有注意到) 。
考虑一个如下所示的存储库。(对于它的可运行副本,包括下面描述的测试,请0cjs/pytest-impl-ns-pkg从GitHub进行克隆。)假定以下所有测试都在中project/thing/thing_test.py。
repo/
project/
util/
thing.py
thing_test.py
Run Code Online (Sandbox Code Playgroud)
我对测试配置有足够的控制权,我可以确保 sys.path对输入的设置进行适当设置,以使被测代码能够正常工作。也就是说,以下测试将通过:
def test_good_import():
import project.util.thing
Run Code Online (Sandbox Code Playgroud)
但是,Pytest正在使用其通常的系统从文件中确定包名称,给出的包名称不是用于我的配置的标准包名称,并将项目的子目录添加到中sys.path。因此,以下两个测试失败:
def test_modulename():
assert 'project.util.thing_test' == __name__
# Result: AssertionError: assert 'project.util.thing_test' == 'thing_test'
def test_bad_import():
''' While we have a `project.util.thing` deep in our hierarchy, we do
not have a top-level `thing` module, so this import should fail. …Run Code Online (Sandbox Code Playgroud) 梅森询问了64位处理器的优势.
嗯,一个明显的缺点是你必须移动更多的位.鉴于内存访问现在是一个严重的问题[1],为相当数量的操作移动两倍的内存可能不是一件好事.
但这种效果有多糟糕,真的吗?是什么弥补了它?或者我应该在32位计算机上运行所有小应用程序?
我应该提一下,我正在考虑,特别是在同一台机器上可以选择运行32位或64位的情况,因此在任一模式下,主存储器的带宽都是相同的.
[1]:甚至十五年前,就此而言.我记得很早就谈到好的缓存行为,特别是那些赢得所有基准测试的Alpha CPU在当时拥有8 MB的L2缓存.
我正在处理一个仓库,其中包含许多由创建的Node包create-react-app,所有这些包均由CI系统构建和测试。目前,每个软件包的构建/测试(react-scripts build均由+ 完成react-scripts test --silent)目前会产生二十多行输出,从而生成包含一百多行材料的构建日志,例如“ gzip之后的文件大小”和“在此处了解更多有关部署的信息”。这使得在该日志中查看错误消息,警告或其他问题更加困难。
除了为每个软件包编写自己的自定义构建脚本(可能还包括测试脚本)之外,我是否可以通过某种方式来解决这个问题?如果我确实需要自定义脚本,那么,尽可能多地重用正在进行构建和测试的现有代码的最佳方法是什么?
CMakeLists.txt这是我正在使用的文件
的开头:
cmake_minimum_required(VERSION 3.12)
project(hello-pyext)
find_package(Python3 COMPONENTS Interpreter Development)
message(STATUS
"Python: version=${Python3_VERSION} interpreter=${Python3_EXECUTABLE}")
if(NOT Python3_FOUND AND Python3_Development_FOUND)
# find_package() will not abort the build if anything's missing.
string(JOIN "\n" errmsg
" Python3 and/or development libs not found."
" - Python3_FOUND=${Python3_FOUND}"
" - Python3_Development_FOUND=${Python3_Development_FOUND}"
)
message(FATAL_ERROR ${errmsg})
endif()
Run Code Online (Sandbox Code Playgroud)
当在 Linux 上使用cmake-3.12.4-Linux-x86_64(从 下载cmake.org)构建时,它工作正常,可以找到通过apt-get. (系统上也安装了Python2,但我已经确认它找到的解释器是Python 3。)
然而,在 Windows 10 上,它找到开发标头/库,但找不到解释器,并打印:
cmake_minimum_required(VERSION 3.12)
project(hello-pyext)
find_package(Python3 COMPONENTS Interpreter Development)
message(STATUS
"Python: version=${Python3_VERSION} interpreter=${Python3_EXECUTABLE}")
if(NOT Python3_FOUND AND Python3_Development_FOUND)
# …Run Code Online (Sandbox Code Playgroud) 我使用的是 Vim 8.0 及其syntax/markdown.vim附带的默认版本,即Tim Pope 的 vim-markdown包的 2016-08-20 版本。
这个包有一个错误,在某些文件上确实让我烦恼:它将任何由四个或更多空格缩进的行视为代码块,包括列表延续。因此,在以下内容中:
1. Agenda Item 1: Frob the Bazzit
- The bazzit is something that makes us have
very _short_ lines indeed.
- Further frobbing is necessary
Run Code Online (Sandbox Code Playgroud)
该行将very _short_ lines indeed突出显示为代码块,并且该单词short不会变为斜体。
我很高兴完全禁用代码块突出显示,至少在这些情况下,但事后我不知道如何做到这一点。我一直在测试~/.vim/after/syntax/markdown.vim调整配置,但我不知道如何,一旦
syn region markdownCodeBlock start=" \|\t" end="$" contained
Run Code Online (Sandbox Code Playgroud)
已在系统中执行,markdown.vim我可以在我的after/syntax/markdown.vim. 我该怎么做呢?
(我尝试过使用highlight link markdownCodeBlock NONE,它确实禁用了这些行上的代码块颜色,但不幸的是它们仍然被标记为代码块区域,并且仍然不突出显示其中的任何其他标记,例如_italic_内`code`联标记。)
在 Python 模块的文档中argparse,3.8 文档指出nargs可以设置为:
\n\n\n
argparse.REMAINDER。所有剩余的命令行参数都收集到一个列表中。这对于分派到其他命令行实用程序的命令行实用程序通常很有用。
这已从3.9 文档中删除,尽管没有提到它已被弃用,也没有任何充分的理由这样做,因为它提供了其他方式显然没有提供的有用功能。\xc2\xb9 它的存在在页面的其他地方仍然提到:
\n\n\n这些[混合]解析器不支持所有 argparse 功能,如果使用不支持的功能,则会引发异常。特别是,不支持子解析器、argparse.REMAINDER 以及包含可选值和位置值的互斥组。
\n
但即使如此,[3.10 文档] 中也删除了这一点。然而,即使在最新发布的 Python 3.11.4 版本中,该功能仍然存在。
\n那么为什么它从文档中删除了呢?
\n我问这个问题是因为这个答案似乎可能直接关系到我关于用 Python 编程参数解析器的其他几个相关问题。(我曾经、现在和可能继续使用的特定情况nargs=REMAINDER足够大,我认为如有必要,它们应该作为单独的问题发布。)考虑因素包括:
(另请注意,此类问题的答案不仅取决于特定的上下文nargs=REMAINDER使用的特定上下文,而且还可能被视为意见问题,这是将它们超出本问题范围的另一个原因。)
\xc2\xb9nargs=REMAINDER与nargs=\'*\': using不同,using 意味着 argparse从那时起REMAINDER不会尝试解析选项(以 …