Не могу до конца понять как запустить процесс (QProcess) из потока. Написал так:
Python
class MyThread(QThread):
#****************************************************************
#
#****************************************************************
def __init__(self, fileName):
QThread.__init__(self)
self._fileName = QString(fileName)
#****************************************************************
#
#****************************************************************
def run(self):
args = QStringList()
args << self._fileName
proc = QProcess()
proc.start(QString('ls'), args)
if not proc.waitForStarted(5000):
print "Error starting"
return
proc.waitForFinished(-1)
print QString(proc.readAllStandardOutput())
del proc
Запускаю 2 потока,
Python
def start(self):
while (1):
th1 = MyThread('/home')
th1.start()
th2 = MyThread('/boot')
th2.start()
time.sleep(1)
Потоки запускаются, отображают листинги. Но через некоторое количество итераций, один из процессов не может стартовать, т.е. метод proc.waitForStarted(5000) отваливается по таймауту. Перечитал документацию, и не могу понять, я что-то неправильно делаю, это глюк в PyQt, или глюк на моей конкретной машине?
Еще прочитал, что для работы в QThread нужно запустить "event loop" с помощью exec(), но куда его вставить? Если до моего кода, то до кода собственно дело и не дойдет ("event loop" будет крутиться до exit-а), а если после создания QProcess, то ошибка произойдет до вызова exec. Или в данном случае "event loop" не причем?
P.S. Пример демонстрационный.
Kubuntu 9.04, libqt4-dev - 4.5.2, python-qt4 - 4.5.4