通过bash从swift执行python:;can';t打开文件…[Errno 1]不允许操作";

通过bash从swift执行python:;can';t打开文件…[Errno 1]不允许操作";,swift,xcode,bash,Swift,Xcode,Bash,我正在学习如何为mac制作应用程序,并从一个应用程序开始管理我的许多discord机器人。本质上,目标是有许多开关来打开和关闭机器人,这需要为机器人执行python文件,使用discord.py编写。我读过关于swift的PythonKit模块的文章,但是当我试图使用该模块从文件运行discord bot时,构建一直失败,所以我决定使用bash shell来超越python。下面是我使用bash shell命令的swift代码: func shell(u命令:String)->String{ 让

我正在学习如何为mac制作应用程序,并从一个应用程序开始管理我的许多discord机器人。本质上,目标是有许多开关来打开和关闭机器人,这需要为机器人执行python文件,使用
discord.py
编写。我读过关于swift的
PythonKit
模块的文章,但是当我试图使用该模块从文件运行discord bot时,构建一直失败,所以我决定使用bash shell来超越python。下面是我使用bash shell命令的swift代码:

func shell(u命令:String)->String{
让任务=进程()
让管道=管道()
task.standardOutput=管道
task.standardError=管道
task.arguments=[“-c”,命令]
task.launchPath=“/bin/zsh”
task.launch()
让data=pipe.fileHandleForReading.readDataToEndOfFile()
让输出=字符串(数据:数据,编码:.utf8)!
返回输出
}func shell(u命令:String)->String{
让任务=进程()
让管道=管道()
task.standardOutput=管道
task.standardError=管道
task.arguments=[“-c”,命令]
task.launchPath=“/bin/zsh”
task.launch()
让data=pipe.fileHandleForReading.readDataToEndOfFile()
让输出=字符串(数据:数据,编码:.utf8)!
返回输出
}
然后我调用了
shell(“/usr/local/bin/python3.9path/to/file.py”)
,并让它将输出打印到控制台。这就是输出:
/usr/local/bin/python3.9:无法打开文件'path/to/file.py':[Errno 1]不允许操作
。我正在从AppCode和Xcode运行此程序,并确保为这两个应用程序提供完整的磁盘访问权限,同时确保为终端提供完整的磁盘访问权限。此外,我还尝试在终端中运行
/usr/local/bin/python3.9path/to/file.py
,效果很好。这里发生了什么?为什么swift不能在bashshell中打开这个文件,而我可以?我该怎么做才能修好它?如果您需要更多信息,请告诉我(如果您认为PythonKit是答案,我将从中发送构建错误信息以调试该进程)
谢谢

Yonatan Vainer是对的,原来权利文件中的沙箱是打开的,所以我必须将其设置为关闭,这就解决了问题。

我感觉它与应用程序沙箱相关:更新:我给了我正在进行完全磁盘访问的应用程序本身,但它仍然给出了相同的错误。默认情况下,沙箱设置似乎处于关闭状态,但我尚未检查此项目的沙箱设置状态。@NathanWolf:如果将
file.py
的相对路径替换为一个单独的路径,会发生什么情况?另外-为了进行调试-在两种上下文(脚本和终端)中运行
stat…/path/to/file.py
,并检查inode编号是否相同。