Как исправить "'subprocess.CalledProcessError" - PullRequest
2 голосов
/ 26 апреля 2019

Я пытаюсь открыть проводник в зависимости от местоположения импортированного файла.

Код запускается, но вместо пути к файлу открывается папка «документы». subprocess.check_call(["explorer", path]). Но если я использую жесткий код вместо использования переменной пути, это дает мне желаемые результаты. В обоих случаях я вижу эту ошибку

Traceback (most recent call last):
  File "C:/Program Files/Nuke11.2v4/plugins\nuke\callbacks.py", line 127, in knobChanged
    _doCallbacks(knobChangeds)
  File "C:/Program Files/Nuke11.2v4/plugins\nuke\callbacks.py", line 46, in _doCallbacks
    f[0](*f[1],**f[2])
  File "C:/Users/Nandan/.nuke/python/utilities_v0.1/revealFinder_module\revealFinder.py", line 53, in reveal_finder
    open_folder(path)
  File "C:/Users/Nandan/.nuke/python/utilities_v0.1/revealFinder_module\revealFinder.py", line 78, in open_folder
    subprocess.check_call(["explorer", path])
  File "C:\Program Files\Nuke11.2v4\lib\subprocess.py", line 186, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['explorer', 'D:/Chrome-Downloads']' returned non-zero exit status 1

Мой код:

import nuke
import os
import subprocess
import sys


def add_reaveal_button():

    node = nuke.thisNode()
    button_reveal = nuke.PyScript_Knob("revealFinder", "Reveal In Finder ", "")

    # creating a tab inside a node
    tab_custom=nuke.Tab_Knob("custom", "Custom")

    #create a tab and add a button to it
    node.addKnob(tab_custom)
    node.addKnob(button_reveal)


def reveal_finder():
    """
     get file path and reveal src in finder
    :return:none
    """

    node = nuke.thisNode()
    knob = nuke.thisKnob()

    if knob.name() == "revealFinder":

        path = os.path.dirname(node["file"].getValue())

        if os.path.isdir(path):
            print "reveal: "
            print path
            open_folder(path)
        else:
            nuke.message("cant reveal in finder. NMO such dir!")


def open_folder(path):
    """
    reveal path in explorer
    :param path:string path to revel explorer
    :return:none
    """

    #check for mac
    if sys.platform == "darwin":
        subprocess.check_call(["open", path])
    if sys.platform == "linux2":
        subprocess.check_call(["gnome-open", path])
    if sys.platform == "win32":
        subprocess.check_call(["explorer", path])
...