[LÖST] Kör kommando och visa outputen via Python?

Här diskuteras programmering och utveckling
Användarvisningsbild
HOLMEN
Fadder
Inlägg: 1724
Blev medlem: 29 mar 2006, 22:39
OS: Ubuntu
Utgåva: Vet inte/ingen utgåva passar
Ort: Göteborg
Kontakt:

[LÖST] Kör kommando och visa outputen via Python?

Inlägg av HOLMEN »

Halloj,

Jag vill att ett kommando ska köras via Python och sedan visa outputen i ett fönster.
Nedan är koden, jag får bara upp en nolla i fönstret och outputen visas i terminalen:

Kod: Markera allt

	f=os.system("uptime")
        label = gtk.Label(f)
        label.set_line_wrap(True)
        label.show()
        self.append_page(label)
        self.set_page_title(label, 'Finished!')
        self.set_page_type(label, gtk.ASSISTANT_PAGE_SUMMARY)

        self.show()
Senast redigerad av 1 HOLMEN, redigerad totalt 15 gånger.
Lars
Inlägg: 6191
Blev medlem: 14 jan 2007, 19:31
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Stockholm

Re: Kör kommando och visa outputen via Python?

Inlägg av Lars »

Använd os.popen() för att öppna en pipe till kommandots stdout, typ så här:

Kod: Markera allt

import os
for line in os.popen("ls"):
    print line
Eller kör f = os.popen("ls") och använd f som en vanlig fil, med f.read() o.s.v.
Användarvisningsbild
HOLMEN
Fadder
Inlägg: 1724
Blev medlem: 29 mar 2006, 22:39
OS: Ubuntu
Utgåva: Vet inte/ingen utgåva passar
Ort: Göteborg
Kontakt:

Re: Kör kommando och visa outputen via Python?

Inlägg av HOLMEN »

Nu känner jag mig verkligen som den noob som jag är. Hur? Körde detta och de funkade inte.

Kod: Markera allt

        # The first page - welcomes the user and changed the bluetooth connection to sixa mode.
        #self.page1 = gtk.Label("This guide will go trough each step to have a connected gamepad.")
	for step1 in os.popen("ls"):
	self.page1 = gtk.Label(step1)
        self.page1.set_line_wrap(True)
        self.page1.show()
        self.append_page(self.page1)
        self.set_page_title(self.page1, 'Welcome to SixA Connection Guide!')
        self.set_page_type(self.page1, gtk.ASSISTANT_PAGE_INTRO)
        self.set_page_complete(self.page1, True )
Lars
Inlägg: 6191
Blev medlem: 14 jan 2007, 19:31
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Stockholm

Re: Kör kommando och visa outputen via Python?

Inlägg av Lars »

Jag har dålig koll på GTK+, men gtk.Label känns helt fel. Är det inte en gtk.TextView du vill ha?
Användarvisningsbild
HOLMEN
Fadder
Inlägg: 1724
Blev medlem: 29 mar 2006, 22:39
OS: Ubuntu
Utgåva: Vet inte/ingen utgåva passar
Ort: Göteborg
Kontakt:

Re: Kör kommando och visa outputen via Python?

Inlägg av HOLMEN »

Nej, det är faktiskt rätt. Det är texten som ska visas i själva rutan och det funkar prima.
Jag får felmeddelandet som jag får:

Kod: Markera allt

  File "setupguide.py", line 18
    self.page1 = gtk.Label(line)
       ^
IndentationError: expected an indented block
Och då är koden:

Kod: Markera allt

        # The first page - welcomes the user and changed the bluetooth connection to sixa mode.
	for line in os.popen("ls"):
	self.page1 = gtk.Label(line)
Lars
Inlägg: 6191
Blev medlem: 14 jan 2007, 19:31
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Stockholm

Re: Kör kommando och visa outputen via Python?

Inlägg av Lars »

Jag fick för mig att kommandot skrev ut många/flera rader med text och att det behövdes en TextView med eventuella rullister för att visa det. En Label är väl menat för korta texter med ganska begränsad längd antar jag.

Om kommandot enbart returnerar en rad kan du göra så här:

Kod: Markera allt

f = os.popen("kommando")
resultat = f.read().strip()
self.page1 = gtk.Label(resultat)
strip() tar bort radbrytningen i slutet av raden (och eventuella mellanslag och dyligt).

Och ja, indenteringen är viktig i Python. Koden måste indenteras så att den ligger rätt i förhållande till vad som ligger före.
Användarvisningsbild
HOLMEN
Fadder
Inlägg: 1724
Blev medlem: 29 mar 2006, 22:39
OS: Ubuntu
Utgåva: Vet inte/ingen utgåva passar
Ort: Göteborg
Kontakt:

Re: Kör kommando och visa outputen via Python?

Inlägg av HOLMEN »

Uppskattar verkligen din hjälp. Dock så har jag nog missat att importera någon modul för nu får jag detta:

Kod: Markera allt

  File "setupguide.py", line 88, in <module>
    win = SetupActionGuide()
  File "setupguide.py", line 18, in __init__
    resultat = f.read.strip()
AttributeError: 'builtin_function_or_method' object has no attribute 'strip'
Gör jag istället om koden till:

Kod: Markera allt

	
f = os.popen("ls")
self.page1 = gtk.Label(f)
Så visas detta som output:

Kod: Markera allt

<open file 'ls', mode 'r' at =x92af7a0>
Lars
Inlägg: 6191
Blev medlem: 14 jan 2007, 19:31
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Stockholm

Re: Kör kommando och visa outputen via Python?

Inlägg av Lars »

Du var för snabb så du missade min buggfix ;) f.read().strip() ska det vara.
Användarvisningsbild
HOLMEN
Fadder
Inlägg: 1724
Blev medlem: 29 mar 2006, 22:39
OS: Ubuntu
Utgåva: Vet inte/ingen utgåva passar
Ort: Göteborg
Kontakt:

Re: Kör kommando och visa outputen via Python?

Inlägg av HOLMEN »

OH YEAH! Det funkar, it is alive! Tackar så oerhört, och snyggt blev det med. Ditt namn kommer som sagt definitivt att synas som tack i mitt program!

Föresten, då kanske du kan en liten annan sak. Det är så att jag behöver göra om ett ord som innehåller stora bokstäver till bara små.
ETQW ska bli etqw och Warsow ska bli warsow. Vet hur man gör i PHP, men inte i Python :P
Lars skrev:Du var för snabb så du missade min buggfix ;) f.read().strip() ska det vara.
Ursäkta, jag är så extas ver mitt första program. Det plus att jag vill ladda upp en fungerande branch innan jag somnar :P
Lars
Inlägg: 6191
Blev medlem: 14 jan 2007, 19:31
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Stockholm

Re: Kör kommando och visa outputen via Python?

Inlägg av Lars »

Ett tips: kör dir("") för att lista alla metoder som finns definierade i sträng-klassen. Listan är inte så lång så du hittar nog vad du letar efter...

Nu är det dags för mig att sova, lycka till med projektet :)
Användarvisningsbild
HOLMEN
Fadder
Inlägg: 1724
Blev medlem: 29 mar 2006, 22:39
OS: Ubuntu
Utgåva: Vet inte/ingen utgåva passar
Ort: Göteborg
Kontakt:

Re: Kör kommando och visa outputen via Python?

Inlägg av HOLMEN »

Tackar och godnatt!
palle-kuling
Inlägg: 466
Blev medlem: 16 apr 2008, 21:54
OS: Ubuntu
Utgåva: 16.04 Xenial Xerus LTS

Re: Kör kommando och visa outputen via Python?

Inlägg av palle-kuling »

Jag rekommenderar verkligen att du lär dig navigera python dokumentationen; http://docs.python.org/library/index.html
Jag tror du letar efter detta; http://docs.python.org/library/stdtypes.html#str.lower
MER MAKT TILL MIG! JAG BESTÄMMER!
Användarvisningsbild
HOLMEN
Fadder
Inlägg: 1724
Blev medlem: 29 mar 2006, 22:39
OS: Ubuntu
Utgåva: Vet inte/ingen utgåva passar
Ort: Göteborg
Kontakt:

Re: Kör kommando och visa outputen via Python?

Inlägg av HOLMEN »

palle-kuling skrev:Jag rekommenderar verkligen att du lär dig navigera python dokumentationen; http://docs.python.org/library/index.html
Jag tror du letar efter detta; http://docs.python.org/library/stdtypes.html#str.lower
Komiskt nog så googlade jag runt och fann just den länken via en gammal maillista och den hjälpte mig med precis det jag ville åstakomma. Tack!

Kod: Markera allt

str = "WarsoW"
print str.lower()
$ warsow
Skriv svar

Återgå till "Programmering och webbdesign"