Sida 1 av 1
[LÖST] Kör kommando och visa outputen via Python?
Postat: 14 apr 2009, 21:56
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()
Re: Kör kommando och visa outputen via Python?
Postat: 14 apr 2009, 23:16
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.
Re: Kör kommando och visa outputen via Python?
Postat: 14 apr 2009, 23:47
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 )
Re: Kör kommando och visa outputen via Python?
Postat: 15 apr 2009, 00:17
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?
Re: Kör kommando och visa outputen via Python?
Postat: 15 apr 2009, 00:34
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)
Re: Kör kommando och visa outputen via Python?
Postat: 15 apr 2009, 00:45
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.
Re: Kör kommando och visa outputen via Python?
Postat: 15 apr 2009, 00:51
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:
Re: Kör kommando och visa outputen via Python?
Postat: 15 apr 2009, 00:53
av Lars
Du var för snabb så du missade min buggfix

f.read().strip() ska det vara.
Re: Kör kommando och visa outputen via Python?
Postat: 15 apr 2009, 00:59
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
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

Re: Kör kommando och visa outputen via Python?
Postat: 15 apr 2009, 01:04
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

Re: Kör kommando och visa outputen via Python?
Postat: 15 apr 2009, 01:05
av HOLMEN
Tackar och godnatt!
Re: Kör kommando och visa outputen via Python?
Postat: 15 apr 2009, 01:17
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
Re: Kör kommando och visa outputen via Python?
Postat: 15 apr 2009, 01:30
av HOLMEN
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!