Python WindowsError[错误5]访问被拒绝

Python WindowsError[错误5]访问被拒绝,python,subprocess,windowserror,Python,Subprocess,Windowserror,我使用killableprocess包(构建在子流程之上)来运行流程 每当我在脚本中运行“killableprocess.Popen(command)”代码时,都会出现以下错误: File "killableprocess.py", line 157, in _execute_child winprocess.AssignProcessToJobObject(self._job, hp) File "winprocess.py", line 37, in ErrCheckBool rai

我使用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
文件“killableprocess.py”,第157行,在执行子项中
winprocess.AssignProcessToJobObject(自我作业,hp)
ErrCheckBool中第37行的文件“winprocess.py”
提出错误()
WindowsError[错误5]访问被拒绝
异常类型错误:忽略中的“非类型”对象不可调用
但是当我从python交互控制台(Python2.6)运行它时,它工作得很好。 这可能意味着,当我从脚本运行此操作时,会出现权限问题,但我不知道如何解决这些问题。我尝试从作为管理员运行的cmd运行脚本,但没有任何帮助。 尝试寻找类似的帖子,但没有找到任何好的解决方案。希望能在这里找到一些帮助 我在Windows上运行,特别是Windows7UltimateX64,如果有帮助的话


谢谢

或者,如果您的模块不工作,您可以使用«子流程»模块:

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) 

是否指定要传递到
Popen
的可执行文件的完整路径(argv中的第一项)

我通过切换到进程目录(我试图使用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])

也许切换到流程目录也会对您有用。

我在使用子流程模块运行时发现,“args”(subprocess.Popen()的第一个参数)中的第一个条目只需要是没有路径的可执行文件名,我需要将参数列表中的
executable
设置为可执行文件的完整路径

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

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

确保您的路径包含可执行文件的名称(inkscape.exe)

去掉
process.pid()
(“TypeError:'int'对象不可调用”)上的括号,同时注意当前的工作目录;其他答案建议在启动流程之前需要
os.chdir(other_dir)
,这可能是正确的,具体取决于流程本身的实现。但是,您也可以使用
cwd=other_dir
参数设置cwd,而无需为脚本本身更改它。
executable=…
对我根本不起作用,但
os.chdir()
起作用
cwd=
同样有效,对我来说这是一个最好的答案。很难找到这个答案!