29

我正在使用 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,如果有帮助的话。

谢谢

4

5 回答 5

17

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

也许切换到进程目录也对你有用。

于 2011-08-20T09:06:19.627 回答
9

我在使用 subprocess 模块遇到这个问题时发现,“args”中的第一个条目(第一个参数subprocess.Popen())需要只是没有路径的可执行文件名,我需要executable在参数列表中设置为我的可执行文件。

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

commandLine = [app, 'arg1', 'arg2']
process = subprocess.Popen(commandLine, executable=appPath)
于 2012-12-12T02:36:11.327 回答
3

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

于 2013-06-27T02:03:39.577 回答
2

或者,如果您的模块不起作用,您可以使用 «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) 
于 2011-01-06T16:11:23.180 回答
0

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

于 2011-01-16T15:53:48.267 回答