WindowsError [error 5] Access is denied

2019-01-11 09:46发布

I'm using the killableprocess package (built on top of subprocess) for running processes Whenever I run the "killableprocess.Popen(command)" piece of code in my script I get the following error:

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

But when I run it from the python interactive console (python 2.6) it works fine. That probably means there are permission issues when I run this from the script, but I don't know how to solve them. I tried running the script from a cmd that I ran as administrator, but it didn't help. Tried looking for similar posts but didn't find any good solution. Hope to find some help here I'm running on Windows, specifically Windows 7 Ultimate x64, if it's any help.

thanks

5条回答
戒情不戒烟
2楼-- · 2019-01-11 10:22

What I found when running into this with the subprocess module is that the first entry in 'args' (the first parameter to subprocess.Popen()) needed to be just the executable name with no path and I needed to set executable in the argument list to the full path of my executable.

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

commandLine = [app, 'arg1', 'arg2']
process = subprocess.Popen(commandLine, executable=appPath)
查看更多
聊天终结者
3楼-- · 2019-01-11 10:30

Alternatively, if your module doesn't work, you can use the «subprocess» module:

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) 
查看更多
我命由我不由天
4楼-- · 2019-01-11 10:33

I solved a similar problem I had by switching to the process directory (I was trying to use inkscape) and it solved my problem

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])

Maybe switching to the process directory will work for you too.

查看更多
欢心
5楼-- · 2019-01-11 10:37

Make sure that your paths include the name of the executable file (inkscape.exe)

查看更多
手持菜刀,她持情操
6楼-- · 2019-01-11 10:40

Do you specify full path to executable you are passing to Popen (the first item in argv)?

查看更多
登录 后发表回答