您将p.poll()和p.kill()分开了20秒。到那时,该过程可能已经完成。我建议移动time.sleep(20)调用,以便您轮询并杀死同一时间范围内发生的事件,以避免杀死死进程。以下是在iPython中运行的示例,该示例在杀死已完成的进程时显示类似的错误:
In [2]: import subprocess
In [3]: p = subprocess.Popen("dir")
In [4]: p.poll()
Out[4]: 0
In [5]: p.kill()
---------------------------------------------------------------------------
WindowsError Traceback (most recent call last)
C:\Users\---\<ipython console> in <module>()
C:\Python26\lib\subprocess.pyc in terminate(self)
947 """Terminates the process
948 """
--> 949 _subprocess.TerminateProcess(self._handle, 1)
950
951 kill = terminate
WindowsError: [Error 5] Access is denied
即使您在显示进程正在运行的轮询之后直接杀死,它也可以在执行下一行之前完成。我还建议为此异常添加一个try- catch块,如果再次发生,则再次轮询以查看该过程是否真正完成。