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

Godot 4调用Python脚本遇权限拒绝,求跨设备/系统解决方案

Godot 4调用Python脚本的跨平台权限问题解决方案

问题背景

使用Godot 4开发GUI应用,已解决项目venv中导入numpy的问题。目前遇到新问题:点击Godot按钮后,两个Python脚本调用方式不同,一个正常执行,另一个报错:

  • 正常执行的调用方式:
OS.execute(python_interpreter, [python_script_path_not, title, body, icon])
  • 报错的调用方式:
var arguments = [some, values, here, and, there]
var exit_code = OS.execute(python_interpreter, arguments, output, true)

在终端进入Godot使用的同一文件夹、激活venv后,两个脚本均可正常运行,但Godot中调用后者时抛出权限错误。

错误信息

["Traceback (most recent call last):\n  File \"/home/user/Desktop/PythonFiles2/venv/lib/python3.10/site-packages/psutil/_pslinux.py\", line 1653, in wrapper\n    return fun(self, *args, **kwargs)\n  File \"/home/user/Desktop/PythonFiles2/venv/lib/python3.10/site-packages/psutil/_pslinux.py\", line 2121, in cpu_affinity_set\n    cext.proc_cpu_affinity_set(self.pid, cpus)\nPermissionError: [Errno 1] Operation not permitted\n\n\nDuring handling of the above exception, another exception occurred:\n\n\nTraceback (most recent call last):\n  File \"/home/user/Desktop/PythonFiles2/vimuscript.py\", line 176, in <module>\n    main()\n  File \"/home/user/Desktop/PythonFiles2/vimuscript.py\", line 52, in main\n    app(args.pcap_file, args.decode_tunnels, args.bpf_filter, args.snapshot_length, args.idle_timeout, args.active_timeout, args.accounting_mode, args.n_dissections, args.statistical_analysis, args.splt_analysis, args.n_meters, args.export_format, args.download_filepath)\n  File \"/home/user/Desktop/PythonFiles2/vimuscript.py\", line 105, in app\n    pandas = streamer.to_pandas()\n  File \"/home/user/Desktop/PythonFiles2/venv/lib/python3.10/site-packages/nfstream/streamer.py\", line 545, in to_pandas\n    total_flows = self.to_csv(path=temp_file_path, columns_to_anonymize=columns_to_anonymize, flows_per_file=0)\n  File \"/home/user/Desktop/PythonFiles2/venv/lib/python3.10/site-packages/nfstream/streamer.py\", line 517, in to_csv\n    for flow in self:\n  File \"/home/user/Desktop/PythonFiles2/venv/lib/python3.10/site-packages/nfstream/streamer.py\", line 367, in __iter__\n    set_affinity(0)  # we pin streamer to core 0 as it's the less intensive task and several services runs\n  File \"/home/user/Desktop/PythonFiles2/venv/lib/python3.10/site-packages/nfstream/utils.py\", line 156, in set_affinity\n    psutil.Process().cpu_affinity(list(temp[idx % x]))\n  File \"/home/user/Desktop/PythonFiles2/venv/lib/python3.10/site-packages/psutil/__init__.py\", line 830, in cpu_affinity\n    self._proc.cpu_affinity_set(list(set(cpus)))\n  File \"/home/user/Desktop/PythonFiles2/venv/lib/python3.10/site-packages/psutil/_pslinux.py\", line 1655, in wrapper\n    raise AccessDenied(self.pid, self._name)\npsutil.AccessDenied: (pid=76525)\n"]

环境信息

  • Ubuntu 22.04 / macOS 13.x
  • Python 3.10
  • Godot 4.1.1

跨平台解决方案

核心问题是Python脚本中nfstream库尝试设置CPU亲和性时,Godot进程没有足够权限。以下是不同操作系统的解决办法:

Linux(如Ubuntu)

  • 添加系统权限:给Godot或导出的可执行文件添加CAP_SYS_NICE权限,该权限允许进程修改CPU亲和性。执行命令:
    sudo setcap cap_sys_nice+ep /path/to/your/godot_executable
    # 导出后的应用同理:
    sudo setcap cap_sys_nice+ep /path/to/exported_app
    
  • 修改Python脚本(推荐):找到nfstream库的streamer.py文件(路径为venv/lib/python3.10/site-packages/nfstream/streamer.py),注释掉或删除第367行的set_affinity(0)代码,避免触发权限检查。
  • 调整用户限制:修改/etc/security/limits.conf文件,添加以下内容后重启系统或重新登录:
    your_username soft nice -20
    

macOS

  • 禁用CPU亲和设置(推荐):同Linux方案,注释掉nfstream的set_affinity(0)代码,macOS的权限模型对CPU亲和性设置限制严格,且nfstream的该逻辑在macOS上兼容性较差。
  • 添加系统权限:打开「系统设置」→「隐私与安全性」→「辅助功能」,将Godot编辑器或导出的应用添加到列表中,授予其控制计算机的权限。

Windows

  • 禁用CPU亲和设置(推荐):注释掉nfstream的set_affinity(0)代码,Windows下设置CPU亲和性需要特殊权限,且nfstream的该逻辑在Windows环境下易触发权限问题。
  • 以管理员身份运行:右键点击导出的应用,选择「以管理员身份运行」;或在应用属性的「兼容性」选项卡中,勾选「以管理员身份运行此程序」,永久生效。

总结

最通用且无权限依赖的方案是修改nfstream的代码,禁用CPU亲和性设置,这样跨平台运行时无需额外配置权限,避免不同操作系统的权限机制差异带来的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 20:42:02