WindowsError [ошибка 5] Доступ запрещен - PullRequest
26 голосов
/ 09 июня 2010

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

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), он работает нормально. Это, вероятно, означает, что при запуске сценария возникают проблемы с разрешениями, но я не знаю, как их решить. Я попытался запустить скрипт из cmd, который я запускал как администратор, но это не помогло. Пробовал искать похожие посты, но не нашел хорошего решения. Надеюсь найти помощь здесь Я использую Windows, в частности Windows 7 Ultimate x64, если это поможет.

спасибо

Ответы [ 5 ]

13 голосов
/ 20 августа 2011

Я решил похожую проблему, перейдя в каталог процессов (я пытался использовать 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])

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

8 голосов
/ 12 декабря 2012

Что я обнаружил при работе с этим модулем подпроцесса, так это то, что первая запись в '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 голосов
/ 27 июня 2013

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

2 голосов
/ 06 января 2011

В качестве альтернативы, если ваш модуль не работает, вы можете использовать модуль «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) 
0 голосов
/ 16 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...