Op Sunday 31 May 2015 23:33 CEST schreef Cecil Westerhof: > At the moment I have the following code: > os.chdir(directory) > for document in documents: > subprocess.Popen(['evince', document]) > > With this I can open several documents at once. But there is no way > to know when those documents are going to be closed. This could/will > lead to zombie processes. (I run it on Linux.) What is the best > solution to circumvent this? > > I was thinking about putting all Popen instances in a list. And then > every five minutes walk through the list and check with poll if the > process has terminated. If it has it can be released from the list. > Of-course I need to synchronise those events. Is that a good way to > do it?
With some investigation I decided on something completely different. I made a class: import os import subprocess from os.path import expanduser from threading import Thread class DocumentsToShow: def show_documents(self): if self._desktop != -1: subprocess.check_call(['wmctrl', '-s', str(self._desktop - 1)]) os.chdir(self._directory) for document in self._documents: Popen_without_zombie(['evince', document]) def __init__(self, name, desktop, directory, documents): '''Initialise the class''' self._name = name self._desktop = desktop self._directory = expanduser(directory) self._documents = documents And this class uses the following function: def Popen_without_zombie(command): p = subprocess.Popen(command) Thread(target = p.wait).start() The class takes a name for the collection, which desktop to display it on, the directory that contains the documents and a list of documents. With show_documents they are displayed. How about this way of solving it? About the improvement of the class. Now it is always evince that is used to open a document. But it would be nice if it was a little less picky. What is the preferred way to solve this? - Defining a set the user can choose from. - Making it a string parameter and expecting the user to know what he is doing. -- Cecil Westerhof Senior Software Engineer LinkedIn: http://www.linkedin.com/in/cecilwesterhof -- https://mail.python.org/mailman/listinfo/python-list