Nieuws:

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

Auteur Topic: hulp met python code  (gelezen 1053 keer)

Offline Nunslaughter

  • Lid
    • timovwb
  • Steunpunt: Nee
hulp met python code
« Gepost op: 2007/11/16, 16:11:25 »
ik heb ondertussen het een en ander afgelezen en begrijp toch al wat van hoe het in mekaar zit...

met glade maak ik een simpele gui en met gladex zet ik deze om in python code...

nu, ik heb in men gui een button gemaakt en die noemt "dcdbas", signal aangepast en gladex maakt dan in een callbacks file deze regel aan:

def on_dcdbas_clicked(widget, data, wtree):
   print "This function is not yet ..."
        pass

dus maak ik ervan:

def on_dcdbas_clicked(widget, data, wtree):
   print "Modprobing dcdbas..."
        pass

dus als ik het uitvoer in een terminal krijg ik ook mooi "Modprobing dcdbas..." te zien als ik op de knop duw...maar er zou een commando aan de knop moeten gelinkt worden, namelijk:

(gk)sudo modprobe dcdbas


hoe krijg ik dat voor elkaar? iets printen als ik op de knop duw is dus gene probleem, maar een commando uitvoeren, daar zie ik nergens iets van staan...

Offline Rulus

  • Lid
  • Steunpunt: Nee
hulp met python code
« Reactie #1 Gepost op: 2007/11/16, 16:29:12 »
Fragmentje:

       import subprocess
        process = subprocess.Popen(['/sbin/modprobe', 'dcdbas'],
                             stdout=subprocess.PIPE,
                             stderr=subprocess.PIPE)
        output, errors = process.communicate()
        if errors or process.returncode:
            print errors
        else:
            print output

Offline Nunslaughter

  • Lid
    • timovwb
  • Steunpunt: Nee
hulp met python code
« Reactie #2 Gepost op: 2007/11/16, 18:54:02 »
kan dat niet iets makkelijker?
dus gewoon in plaats van print, ergens een commando dat mijn regel doet uitvoeren?

Offline Kev

  • Lid
  • Steunpunt: Nee
hulp met python code
« Reactie #3 Gepost op: 2007/11/16, 18:58:46 »
Je moet dit via een importmodule openen via Popen uit een module, ik weet niet vanbuiten welke, maar daarvoor heb je hele goede docu meegeleverd, je zou best eens kunnen proberen om devhelp te installeren en dan de python library manual te raadplegen naar Popen. Dit is de enigste manier om externe programma's te gebruiken in Pythoncode.
All Hail Lelouch, The 99th Emperor of Britannia
All Hail Lelouch! All Hail Lelouch!
Iedereen heeft het recht op mijn waarheid, zo wees geprezen.

Offline Rulus

  • Lid
  • Steunpunt: Nee
hulp met python code
« Reactie #4 Gepost op: 2007/11/17, 12:53:56 »
Veel makkelijker zal niet gaan vrees ik. Als je mijn fragment in je on_dcdbas_clicked functie plaatst zou het moeten werken (mits je de code uitvoert als root, aangezien je voor modprobe root-rechten moet hebben).

Deze code importeert de 'subprocess' module en roept daarvan Popen aan, een functie die een subprocess start -- in dit geval /sbin/modprobe met 'dbdbas' als argument. Daarna worden de errors en de output opgeslagen in twee variabelen. Vervolgens wordt gekeken of er errors zijn, zo ja worden die afgedrukt, zo nee wordt de output afgedrukt.

Offline Nunslaughter

  • Lid
    • timovwb
  • Steunpunt: Nee
hulp met python code
« Reactie #5 Gepost op: 2007/11/17, 17:54:56 »
het werkte zo, maar omdat ik nog heel wat andere commando's wil laten uitvoeren met mijn programma, heb ik toch een betere oplossing gevonden...want het is toch telkens een hele blok per commando met die oplossing...

dit is wat ik er van heb gemaakt, en het werkt...

import commands

def on_dcdbas_clicked(widget, data, wtree):
print "Modprobing dcdbas..."
        commands.getstatusoutput('sudo modprobe dcdbas')
nu weet ik niet of dit een "goede" oplossing is, maar hij doet het wel...