Подтвердить что ты не робот

WindowsError [ошибка 5] Доступ запрещен

Я использую пакет killableprocess (встроенный поверх подпроцесса) для запуска процессов Всякий раз, когда я запускаю "killableprocess.Popen(command)" часть кода в моем script, я получаю следующую ошибку:

File "killableprocess.py", line 157, in _execute_child
  winprocess.AssignProcessToJobObject(self._job, hp)
File "winprocess.py", line 37, in ErrCheckBool
  raise WinError()
WindowsError [error 5] Access is denied
Exception TypeError: "'NoneType' object is not callable" in <bound method AutoHANDLE.__del__ of <AutoHANDLE object at 0x025D42B0>> ignored

Но когда я запускаю его из интерактивной консоли python (python 2.6), он отлично работает. Вероятно, это означает, что есть проблемы с правами доступа, когда я запускаю это из script, но я не знаю, как их решить. Я попытался запустить script из cmd, который я запускал как администратор, но это не помогло. Пробовал искать похожие должности, но не нашел подходящего решения. Надеюсь найти помощь здесь Я запускаю Windows, в частности Windows 7 Ultimate x64, если это поможет.

спасибо

4b9b3361

Ответ 1

Я решил проблему, с которой я столкнулся, переключившись на каталог процесса (я пытался использовать inkscape), и он решил мою проблему

import subprocess
inkscape_dir=r"C:\Program Files (x86)\Inkscape"
assert os.path.isdir(inkscape_dir)
os.chdir(inkscape_dir)
subprocess.Popen(['inkscape.exe',"-f",fname,"-e",fname_png])

Возможно, переход к каталогу процессов будет работать и для вас.

Ответ 2

То, что я обнаружил при работе с этим модулем подпроцесса, состоит в том, что первая запись в 'args' (первый параметр subprocess.Popen()) должна была быть просто исполняемым именем без пути, и мне нужно было установить executable в списке аргументов до полного пути моего исполняемого файла.

app = 'app.exe'
appPath = os.path.join(BIN_DIR, app)

commandLine = [app, 'arg1', 'arg2']
process = subprocess.Popen(commandLine, executable=appPath)

Ответ 3

Убедитесь, что ваши пути включают имя исполняемого файла (inkscape.exe)

Ответ 4

В качестве альтернативы, если ваш модуль не работает, вы можете использовать модуль "subprocess":

import subprocess, os, time

process = subprocess.Popen("somecommand", shell=True)
n = 0
while True:
    if not process.poll():
        print('The command is running...')
        if n >= 10:
            pid = process.pid()
            os.kill(pid, 9) # 9 = SIGKILL
    else:
        print('The command is not running..')
    n += 1
    time.sleep(1) 

Ответ 5

Укажите полный путь к исполняемому файлу, который вы переходите на Popen (первый элемент в argv)?