我在最近安装的macOS 10.14(Mojave)上使用Python 2.7.3。 该代码在Foundry的Nuke中运行。
a=nuke.selectedNode()
b=a['file'].value()
#b now has path to some file
u=os.path.split(b) [0]
u = os.path.normpath (u)
if u != ".":
subprocess.Popen(['open', '-R', '%s' % (u)])
我要做的是打开文件所在的Finder窗口。 使用先前版本的macOS,它将立即打开Finder。 最新的升级需要30到60秒才能打开(有时甚至无法正常工作)。
请任何帮助。 谢谢。
答案 0 :(得分:0)
经过详尽的调查,我发现使用macOS Mojave 10.14.5中使用subprocess.Popen()
类从NUKE 11.3v4脚本编辑器发送的命令打开系统目录中的延迟既不是macOS,也不是macOS问题或Python问题本身。我不仅尝试调用在Mojave中启用了系统完整性保护或禁用了SIP的subprocess.Popen()
类(请参见here如何启用和禁用SIP),而且还尝试了以下不推荐使用的方法: os.popen()
和commands.getoutput()
。
对于此测试,我使用了以下代码:
import nuke
from os import name, popen
from sys import platform
from subprocess import Popen
from os.path import abspath, join, dirname
from commands import getoutput
n = nuke.toNode('Read1')['file'].value()
if name == 'posix' and platform == 'darwin':
path = abspath(join(dirname(n)))
command = "open %s" % path
if path is not ".":
# commands.getoutput() method is deprecated since Python 2.6
# But it's still working in Python 2.7...
''' It takes 21 second to open a directory using getoutput() '''
getoutput(command)
# os.popen() method is deprecated since Python 2.6
# But it's still working in Python 2.7...
''' It takes 21 second to open a directory using popen() '''
popen(command)
# subprocess.Popen() class is a working horse now...
''' It takes 21 second to open a directory using Popen() '''
Popen(command, shell=True)
无论我在Mojave中使用哪种系统方法或类, 花费21秒 (我在MBP 15” 2017上工作)都可以使用{{ 1}}命令。
因此,我可以得出结论,这个缺点来自The Foundry开发人员。我想在面向macOS 10.15 Catalina的NUKE 12的未来版本中,它们会更好地适应这些方法。
此外,您还可以在open