如何在MacOS上通过Python代码打开Unity/C#项目?
解决MacOS下Python调用Unity的问题
一、修复基础调用错误
你当前的代码错误在于把列表UNITY直接拼进字符串,导致命令格式混乱。正确的做法是把所有参数放进列表传递给subprocess.run,避免字符串拼接的问题:
import subprocess # 正确的参数列表写法 UNITY_OPEN_CMD = [ "/usr/bin/open", "-W", # 等待应用退出 "-n", # 打开新实例 "-a", "Unity.app", "--args", # 传递参数给Unity的关键标记 "-projectPath", "/Users/graphic/Documents/GitHub/proj" ] subprocess.run(UNITY_OPEN_CMD, check=True)
注意--args是open命令用来区分自身参数和目标应用(Unity)参数的关键,没有它的话,-projectPath会被当成open的参数,而非Unity的,这会直接导致Unity无法识别项目路径,触发文件找不到的错误。
二、后台批处理模式实现(签名自动化)
如果要后台执行签名这类自动化操作,直接调用Unity的可执行文件比用open命令更可靠,同时启用批处理模式:
import subprocess # 替换为你实际的Unity版本路径,Unity Hub安装的版本通常在此目录下 UNITY_EXECUTABLE = "/Applications/Unity/Hub/Editor/2022.3.1f1/Unity.app/Contents/MacOS/Unity" # 批处理参数逻辑和Windows一致,路径改用MacOS格式 cmd = [ UNITY_EXECUTABLE, "-quit", # 任务完成后自动退出 "-batchmode", # 后台无界面运行 "-projectPath", "/Users/graphic/Documents/GitHub/proj", "-executeMethod", "BuildScript.BuildAll", "-logFile", "/Users/graphic/Documents/unity_build.log" # 输出日志方便排查错误 ] try: subprocess.run(cmd, check=True, capture_output=True, text=True) print("Unity自动化任务执行成功") except subprocess.CalledProcessError as e: print(f"执行失败,错误信息:{e.stderr}")
路径注意事项:
- Unity可执行文件路径:需替换为你安装的具体Unity版本路径,格式为
/Applications/Unity/Hub/Editor/[版本号]/Unity.app/Contents/MacOS/Unity。 - 项目路径必须用绝对路径,避免相对路径引发的文件找不到问题。
三、解决权限不足问题
- PyCharm权限配置:
- 在系统偏好设置→安全性与隐私→隐私→完全磁盘访问权限中,添加PyCharm,确保它能访问项目文件夹和Unity安装目录;或者右键点击PyCharm图标选择「打开」,首次运行时允许权限请求。
- 文件权限检查:
- 确保项目文件夹和Unity可执行文件有足够的读写/执行权限:
chmod -R 755 /Users/graphic/Documents/GitHub/proj chmod +x /Applications/Unity/Hub/Editor/[版本号]/Unity.app/Contents/MacOS/Unity
- 确保项目文件夹和Unity可执行文件有足够的读写/执行权限:
- 避免sudo运行:尽量不要用sudo启动PyCharm或脚本,否则可能导致文件权限混乱。
四、打开C#解决方案(.sln文件)
如果要直接打开Unity项目的C#解决方案,用open命令即可:
import subprocess SLN_PATH = "/Users/graphic/Documents/GitHub/proj/YourProject.sln" subprocess.run(["/usr/bin/open", "-n", SLN_PATH], check=True)
这会调用系统默认的IDE(如Rider、Visual Studio for Mac)打开解决方案。
内容的提问来源于stack exchange,提问作者suMmGuy
相关产品推荐
相关产品推荐

