Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
psutil异常错误-在linux上没有这样的进程,在windows-Python上工作_Python_Linux_Windows_Process_Psutil - Fatal编程技术网

psutil异常错误-在linux上没有这样的进程,在windows-Python上工作

psutil异常错误-在linux上没有这样的进程,在windows-Python上工作,python,linux,windows,process,psutil,Python,Linux,Windows,Process,Psutil,我正试图用psutil编写一个程序来监视python中的进程(我发现的唯一一个是跨平台的) 我需要监视进程的启动时间和终止时间。 我制作了两个列表,一个用于当前进程,第二个用于prev进程,两个循环检查当前进程是否不在prev中,然后添加他并打印他的名字,第二个循环检查prev中的进程是否不在当前,然后打印他的名字并“终止”,第一个循环非常有效,但第二个循环仅在Windows上工作,在linux上,它会给我错误psutil.\u例外情况NoSuchProcess oldProcess = []

我正试图用psutil编写一个程序来监视python中的进程(我发现的唯一一个是跨平台的) 我需要监视进程的启动时间和终止时间。 我制作了两个列表,一个用于当前进程,第二个用于prev进程,两个循环检查当前进程是否不在prev中,然后添加他并打印他的名字,第二个循环检查prev中的进程是否不在当前,然后打印他的名字并“终止”,第一个循环非常有效,但第二个循环仅在Windows上工作,在linux上,它会给我错误psutil.\u例外情况NoSuchProcess

oldProcess = []
while 1:
    newProcess = list(psutil.process_iter())
    for process in newProcess:
        if process in oldProcess:
            continue
        else:
            print "new process: " + process.name()
            oldProcess.append(process)
    for process in oldProcess:
        if process not in newProcess:
            print "process terminated: " + process.name()
            oldProcess.remove(process)

当您查询该进程的名称时,该进程可能已终止。您应该在查询名称时捕获异常。我该如何做?为什么它在windows下工作?不同的操作系统,不同的竞争条件。。。捕获异常
try/except
它似乎在Windows上工作,因为在Windows上,在第一个
for
循环中发现的进程名称缓存在
进程
对象中,因此在第二个
for
循环中始终可用。我之所以说“出现”,是因为在第一个循环中应用了相同的竞争条件,所以在那里发生的可能性较小。在Linux上,该名称不会被缓存,因此第二个循环将始终询问不再存在的进程的名称,这将获得异常。psutil文档中对此进行了解释