PermissionError: [Errno 1] for os.rename as quick action

Posted

技术标签:

【中文标题】PermissionError: [Errno 1] for os.rename as quick action【英文标题】: 【发布时间】:2022-01-17 08:37:18 【问题描述】:

这个问题代表解决另一个问题时遇到的最新问题。让我先解释一下当前的问题,把最初的困难留在最后。

os.rename(old_path, new_path)

Python 命令在 Automator 中运行 Python 脚本时有效(使用右上角的运行按钮)。

/usr/local/bin/python3 "/Users/user/Library/Scripts/move.py"

但是,当作为快速操作运行时,它会引发错误

The action “Run Shell Script” encountered an error: “Traceback (most recent call last):
File "/Users/user/Library/Scripts/move.py", line 6, in <module>
os.rename(folder_path, folder_nath)
PermissionError: [Errno 1] Operation not permitted:

所有建议的解决方案都告诉我授予各种程序全盘访问权限。但是,在对 Terminal、Finder、Automator 和 bash 执行此操作后,我仍然看到错误。我什至在“获取信息”框中更改了要重命名的文件夹的权限。没有任何帮助。


这个问题似乎与我之前遇到的另一个问题是同构的:另一个建议不能作为快速操作:

os.system("""/bin/mv \"""" + old_path + """\" \"""" + new_path + """\"""")

此命令在 PyCharm 中有效;当我在 Automator 中运行包含它的 python 代码时它可以工作(使用右上角的“运行”按钮)。

/usr/local/bin/python3 "/Users/user/Library/Scripts/move.py"

但是,当我将这个工作流程作为由键盘快捷键触发的快速操作运行时,它确实不起作用:快速操作显然在小齿轮旋转时起作用,但文件保持不变。

【问题讨论】:

我不确定为什么你有这么多不必要的引号 - os.system("/bin/mv '" + old_path + "' '" + new_path + "'") 工作正常,虽然它确实应该是 subprocess.run(["/bin/mv", old_path, new_path]) 遵循最佳实践。 值得指出的是,os.rename( old_path, new_path ) 具有相同的功能,而且打字更快更容易。 “它不起作用”是什么意思?你有错误吗?如果是这样,它是什么?如果没有,会发生什么,你想要什么? 呃,如果路径包含单引号,带有 shell 命令的代码仍然会失败。可能需要使用 shlex 来解决这个问题,或者只使用子进程。 是的,我已经看到了。我已将此权限授予 Terminal、Bash、Finder,但均无济于事。 【参考方案1】:

我已经解决了这个问题。当涉及到这样的快速操作时,您需要在使用快速操作时为打开的应用程序授予完整的磁盘访问权限。

当我在使用 TextEdit 时使用此快速操作时,我需要授予 TextEdit 完整的磁盘访问权限。

【讨论】:

以上是关于PermissionError: [Errno 1] for os.rename as quick action的主要内容,如果未能解决你的问题,请参考以下文章

PermissionError Errno 13 in python

PermissionError: [Errno 13] 权限被拒绝

mac 在终端上运行脚本,提示PermissionError: [Errno 1] Operation not permitted

mac 在终端上运行脚本,提示PermissionError: [Errno 1] Operation not permitted

PermissionError: [Errno 1] for os.rename as quick action

PermissionError: [Errno 13] Permission denied: ‘name.pdf‘