Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: popen of QProcess  (gelezen 1363 keer)

Offline dvdmeer

  • Lid
    • Python-RandR :: dvdmeer.nl
popen of QProcess
« Gepost op: 2008/08/07, 19:32:46 »
Ben bezig met een progje met PyQt4, waarbij er ook shell acties uitgevoerd worden.
Nou kan dit zowel via os.popen, als via QProcess.

Waarom zou ik het ene juist wel of juist niet gebruiken en andersom? Of maakt het niet uit wat ik kies?

Offline profoX

  • Lid
    • wesley
    • Lionslink
popen of QProcess
« Reactie #1 Gepost op: 2008/08/07, 22:30:10 »
Ik heb ooit eens kort naar os.popen gekeken, maar ik vond het maar iets ingewikkeld, en de documentatie zag er ook niet echt uit alsof het nuttig/makkelijk in gebruik is.. Maar euh, je wil liever os.subprocess gebruiken ipv os.popen, denk ik. Hoewel het er natuurlijk aan ligt wat je precies wil doen...

Anyway, ik heb even wat gevraagd op het #python IRC kanaal en men is het ermee eens dat os.subprocess eigenlijk helemaal niet zo lekker werkt als QProcess... het ligt er natuurlijk aan wat je wil doen, maar wat je ook wil doen, QProcess maakt het eenvoudiger, en heeft meer opties. QProcess heeft ook het grote voordeel van signal/slot verbindingen.. ik wil je wel op weg helpen met de implementatie van QProcess in je appje indien nodig.
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

Offline dvdmeer

  • Lid
    • Python-RandR :: dvdmeer.nl
popen of QProcess
« Reactie #2 Gepost op: 2008/08/08, 14:23:02 »
Heb de source online gezet: http://download.dvdmeer.nl/python-randr/python-randr-0.0.2.tar.gz

Wat doet dit progje: een simpele gui met een paar buttons, elk van die button voert een shell command uit.
Als ik bijvoorbeeld op de button LCD + TV klik, dan krijg ik mijn laptopbeeld op de tv in kleur. Dit gebeurd bij mij namelijk niet standaard. En om telkens nou commando's of shell scriptjes te draaien.. daarom voor het gemak dit progje gemaakt.

Op 1 functie na gebeurd alles nu via QProcess.

Het gene waar ik nog os.popen gebruik is hier:

[EDIT]: heb het op kunnen lossen daar dit in de dependencies te zetten in het CONTROL bestand. Dus deze functie zal uit het programma verdwijnen.. maar ik laat het nog even staan, omdat ik nog wel wil weten hoe dit opgelost zou kunnen worden.[/EDIT]

   # check which version is running
    def getRandR(self):
self.version = os.popen('xrandr -v').readline()
self.version = self.version.split(None)[4]

return self.version
Het is me niet gelukt om dit werkend met QProcess te krijgen. Zowel QProcess.start als .execute uitgevoerd, maar ik krijg simpel weg niet de output binnen...

En over die QProcess, waar ik het nu gebruik:

   # LCD and TV
    def LcdTv(self):
self.command = "xrandr --output TV --set TV_FORMAT PAL --output LVDS --mode 1024x768 --output TV --auto --output VGA --off"
self.qproc = QProcess(self)
self.qproc.setProcessChannelMode(QProcess.MergedChannels)
self.qproc.start(QString.fromUtf8(str(self.command)))
Dit werkt allemaal prima, maar doe ik dit zo op de goede manier. Moet ik QProcess niet afsluiten? Had dit zelf al geprobeerd middels QProcess.close() maar als ik dat doe werkt geen enkele functie meer.

Ik hoop dat je het een beetje begrijpt, en wat uitleg kan geven?
(btw, heb vidiqatch er naast gehouden.. en tijdelijk een paar icons daar van gebruikt)

Offline dvdmeer

  • Lid
    • Python-RandR :: dvdmeer.nl
popen of QProcess
« Reactie #3 Gepost op: 2008/08/08, 15:35:12 »
En nog een andere vraag. Als ik in Qt Designer een combobox plaats, wat is dan het beste, de items voor de combobox al toevoegen in designer, of de items in het bestandje plaatsen dat de UI aanmaakt? (Dus niet config_UI.py maar config.py.)