You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MacOS下Python用subprocess调用sysctl触发FileNotFoundError求助

解决MacOS中Python subprocess调用sysctl出现FileNotFoundError的问题

问题根源

你错误地将包含参数的完整命令字符串直接传给了subprocess,而没有按要求拆分。当使用subprocess默认的shell=False时,它会把整个字符串当作单个可执行文件的路径去查找——显然不存在'/usr/sbin/sysctl -n machdep.cpu.brand_string'这个文件,实际可执行文件是/usr/sbin/sysctl,后面的都是参数。

root身份能运行只是环境或调用方式的偶然差异,核心问题还是参数传递错误。

正确调用方式

有两种可靠的写法:

方式1:拆分命令为列表(推荐,更安全)

import subprocess
# 将命令和参数拆分为独立的列表元素
result = subprocess.run(
    ['/usr/sbin/sysctl', '-n', 'machdep.cpu.brand_string'],
    capture_output=True,
    text=True
)
print(result.stdout.strip())

方式2:开启shell=True(适合简单场景,注意安全风险)

如果不想拆分参数,可以开启shell模式,让系统shell来解析整个命令:

import subprocess
result = subprocess.run(
    '/usr/sbin/sysctl -n machdep.cpu.brand_string',
    shell=True,
    capture_output=True,
    text=True
)
print(result.stdout.strip())

关于权限无法修改的说明

你无法用sudo修改/usr/sbin/sysctl的权限,是因为MacOS的**系统完整性保护(SIP)**机制。该机制锁定了系统核心目录与文件,禁止任何用户(包括root)修改,以此保障系统安全稳定。/usr/sbin属于SIP保护范围,所以出现Operation not permitted是正常的,无需也不应关闭SIP来修改该文件。

内容的提问来源于stack exchange,提问作者luke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 09:15:33