小编Cur*_*son的帖子

如何确保我的Linux程序不会产生核心转储?

我有一个程序将内存中的安全敏感信息(如私钥)保存在内存中,因为它在程序的生命周期内使用它们.此程序的生产版本将RLIMIT_CORE设置为0,以确保永远不会生成可能包含此敏感信息的核心转储.

但是,虽然在core(8)联机帮助页中没有提到这一点,但Ubuntu维基上的apport文档声称,

请注意,即使ulimit设置为禁用核心文件(通过使用ulimit -c 0指定核心文件大小为零),apport仍将捕获崩溃.

我的流程中是否存在一种方式(即,不依赖于外部系统的配置),我可以确保永远不会生成我的流程的核心转储?

注意:我知道有很多方法(例如下面的评论中提到的方法),具有root或进程所有者权限的用户仍然可以访问敏感数据.我的目标是通过将敏感数据保存到磁盘,发送到Ubuntu错误跟踪系统或类似的东西来防止无意中暴露敏感数据.(感谢Basile Starynkevitch明确表示这一点.)

linux security coredump

10
推荐指数
1
解决办法
342
查看次数

Ruby <=>组合器的实现

不经常,人们希望<=>在产品数据类型上实现(比较或"太空船")运算符,即具有多个字段的类(所有这些(我们希望!)已经<=>实现),比较某些字段订购.

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 …

ruby combinators spaceship-operator

6
推荐指数
2
解决办法
1100
查看次数

使用VLists的哈希表

Phil Bagwell在其2002年关于VList数据结构的论文中指出,您可以使用VList来实现持久性哈希表.然而,他对如何运作的解释并没有包含太多细节,我也不理解.谁能给我一个更详细的解释,甚至是例子?

此外,在我看来,我可以看到这个数据结构,虽然它可能具有与Hashtable相同的大O复杂性,但它会更慢,因为它会进行额外的查找.是否有人关心如何慢慢地进行详细分析,最好包括缓存行为?在没有碰撞或多次碰撞的情况下,两者之间的绩效关系如何变化?

complexity-theory haskell functional-programming hashtable data-structures

5
推荐指数
1
解决办法
535
查看次数

没有属性的关系

Aheo询问是否可以只有一列的表.如果一个没有列,或者,鉴于这在大多数现代"关系型"DBMS中似乎很难做到,没有属性的关系怎么样?

rdbms relational-algebra

5
推荐指数
1
解决办法
770
查看次数

使用autocrlf = false的Git仍然会产生"警告:CRLF将被LF替换"消息

我在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会有所不同吗?
  • 不,我只是仔细检查,文件在每个0x0d后有一个0x0a,在每个0x0a之前有一个0x0d.

git core.autocrlf

5
推荐指数
1
解决办法
1100
查看次数

sys.meta_path和sys.path_hooks导入对象之间有什么区别?

使用importlib,“元路径查找器”(通过sys.meta_path遍历发现)和“路径条目查找器”(通过sys.path_hooks遍历发现)有什么区别?

第一种类型在导入开始时被调用,但是第二种类型何时使用?两者都返回规格对象吗?

我要实现自定义导入,可以从* .py或* .pyc以外的其他来源(例如,从流)导入模块。如何才能做到这一点?

python python-module python-import

5
推荐指数
2
解决办法
1322
查看次数

如何使用PEP 420名称空间包对项目进行Pytest?

我正在尝试使用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)

pytest

5
推荐指数
1
解决办法
701
查看次数

64位和内存带宽

梅森询问了64位处理器的优势.

嗯,一个明显的缺点是你必须移动更多的位.鉴于内存访问现在是一个严重的问题[1],为相当数量的操作移动两倍的内存可能不是一件好事.

但这种效果有多糟糕,真的吗?是什么弥补了它?或者我应该在32位计算机上运行所有小应用程序?

我应该提一下,我正在考虑,特别是在同一台机器上可以选择运行32位或64位的情况,因此在任一模式下,主存储器的带宽都是相同的.

[1]:甚至十五年前,就此而言.我记得很早就谈到好的缓存行为,特别是那些赢得所有基准测试的Alpha CPU在当时拥有8 MB的L2缓存.

memory performance 64-bit bandwidth

4
推荐指数
1
解决办法
724
查看次数

如何使“反应脚本构建”变得安静?

我正在处理一个仓库,其中包含许多由创建的Node包create-react-app,所有这些包均由CI系统构建和测试。目前,每个软件包的构建/测试(react-scripts build均由+ 完成react-scripts test --silent)目前会产生二十多行输出,从而生成包含一百多行材料的构建日志,例如“ gzip之后的文件大小”和“在此处了解更多有关部署的信息”。这使得在该日志中查看错误消息,警告或其他问题更加困难。

除了为每个软件包编写自己的自定义构建脚本(可能还包括测试脚本)之外,我是否可以通过某种方式来解决这个问题?如果我确实需要自定义脚本,那么,尽可能多地重用正在进行构建和测试的现有代码的最佳方法是什么?

react-scripts

4
推荐指数
1
解决办法
1098
查看次数

CMake FindPython3 无法在 Windows 上找到解释器

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)

python windows cmake visual-studio-2017

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

如何禁用 vim 语法高亮中的语法区域?

我使用的是 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`联标记。)

vim vim-syntax-highlighting

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

为什么 Python `argparse` 停止记录 nargs=REMAINDER?

在 Python 模块的文档中argparse3.8 文档指出nargs可以设置为:

\n
\n

argparse.REMAINDER。所有剩余的命令行参数都收集到一个列表中。这对于分派到其他命令行实用程序的命令行实用程序通常很有用。

\n
\n

这已从3.9 文档中删除,尽管没有提到它已被弃用,也没有任何充分的理由这样做,因为它提供了其他方式显然没有提供的有用功能。\xc2\xb9 它的存在在页面的其他地方仍然提到

\n
\n

这些[混合]解析器不支持所有 argparse 功能,如果使用不支持的功能,则会引发异常。特别是,不支持子解析器、argparse.REMAINDER 以及包含可选值和位置值的互斥组。

\n
\n

但即使如此,[3.10 文档] 中也删除了这一点。然而,即使在最新发布的 Python 3.11.4 版本中,该功能仍然存在。

\n

那么为什么它从文档中删除了呢?

\n
\n

我问这个问题是因为这个答案似乎可能直接关系到我关于用 Python 编程参数解析器的其他几个相关问题。(我曾经、现在和可能继续使用的特定情况nargs=REMAINDER足够大,我认为如有必要,它们应该作为单独的问题发布。)考虑因素包括:

\n
    \n
  • 为了我的目的,API 是否在某种程度上被破坏了,这是否意味着我使用它的代码也被破坏了?
  • \n
  • 我应该寻找这个 API 的替代品吗?
  • \n
  • 我应该在新代码中继续使用这个 API 吗?毕竟,它还没有被弃用。
  • \n
  • 我是否应该将使用此 API 的现有代码转换为使用其他内容?
  • \n
\n

(另请注意,此类问题的答案不仅取决于特定的上下文nargs=REMAINDER使用的特定上下文,而且还可能被视为意见问题,这是将它们超出本问题范围的另一个原因。)

\n
\n

\xc2\xb9nargs=REMAINDERnargs=\'*\': using不同,using 意味着 argparse从那时起REMAINDER不会尝试解析选项(以 …

python argparse

-4
推荐指数
1
解决办法
245
查看次数