当我尝试使用subprocess.Popen.terminate()或kill()命令在Windows中终止进程时,我收到拒绝访问错误。如果文件不再存在,我真的需要一种跨平台的方式来终止进程(是的,我知道这不是我正在做的事情的最优雅方式),我不想使用平台调用或如果可能的话,导入win32api。
此外 - 一旦我终止任务,我应该能够删除该部分库的迭代,不是吗? (我记得读过一些关于必须使用切片的东西,如果我计划在处理某些东西并在处理它时修改它?)
#/usr/bin/env python
#import sys
import time
import os
import subprocess
import platform
ServerRange = range(7878, 7890) #Range of ports you want your server to use.
cmd = 'VoiceChatterServer.exe'
#********DO NOT EDIT BELOW THIS LINE*******
def Start_IfConfExist(i):
if os.path.exists(str(i) + ".conf"):
Process[i] = subprocess.Popen(" " + cmd + " --config " + str(i) + ".conf", shell=True)
Process = {}
for i in ServerRange:
Start_IfConfExist(i)
while True:
for i in ServerRange:
if os.path.exists(str(i) + ".conf"):
res = Process[i].poll()
if not os.path.exists(str(i) + ".conf"): #This is the problem area
res = Process[i].terminate() #This is the problem area.
if res is not None:
Start_IfConfExist(i)
print "\nRestarting: " + str(i) + "\n"
time.sleep(1)
答案 0 :(得分:2)
您可以通过执行以下简单的操作轻松地进行与平台无关的调用:
try:
import win32
def kill(param):
# the code from S.Lotts link
except ImportError:
def kill(param):
# the unix way
为什么python默认情况下这不存在我不知道,但是在文件更改通知等其他方面存在非常类似的问题,其中制作独立于平台的lib并不困难(或者至少WIN + MAC + LINUX)。我想这是开源的,所以你必须自己解决它:P