带有macOS Mojave 10.14的Python Slow

时间:2018-12-12 11:15:10

标签: python python-2.7 subprocess macos-mojave nuke

我在最近安装的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秒才能打开(有时甚至无法正常工作)。

请任何帮助。 谢谢。

1 个答案:

答案 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

中找到可以从NUKE使用的所有Python方法和类。