【问题标题】:Cannot call ubuntu 'ulimit' from python subprocess without using shell option在不使用 shell 选项的情况下无法从 python 子进程调用 ubuntu 'ulimit'
【发布时间】:2019-08-17 12:14:18
【问题描述】:

当我尝试从子进程调用 ulimit -n 时,即

subprocess.check_output(['ulimit', '-n'])

我收到以下错误:

OSError: [Errno 2] No such file or directory

这很奇怪,因为该命令在命令行上是有效的。之前对类似问题的回答集中在需要以列表的形式输入命令,我已经做到了。其他答案提到别名命令可能会导致子进程出现问题,但 ulimit 不是别名。如果我使用 shell=True 选项,则代码有效。但我想了解原因。

【问题讨论】:

  • @rdas 它是内置的,不存在这样的二进制文件。

标签: python linux subprocess


【解决方案1】:

ulimit 是系统调用的包装器,用于限制当前进程的资源。因为作用于当前进程,所以需要在当前进程上调用,否则没有作用。

因此,shell 将其实现为内置的,因此没有这样的二进制文件。

如果你要创建一个shell 来调用ulimit,然后杀死shell,你什么也做不了,因为有限制的进程随后被杀死了。这就是为什么像cd这样影响当前进程的东西需要像在shell中那样实现的原因。

这意味着你不能在 python 中将它作为子进程调用。幸运的是,python 有一个模块来包装它:https://docs.python.org/3/library/resource.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-01
    • 1970-01-01
    • 2012-09-02
    • 1970-01-01
    • 2015-12-10
    • 2014-10-17
    相关资源
    最近更新 更多