Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:

THEMA: system$ - Befehl und die Rückgabe

system$ - Befehl und die Rückgabe 2 Jahre 2 Monate her #5611

  • prOSy
  • OFFLINE
  • Senior Boarder
  • Beiträge: 54
  • Punkte: 275
  • Karma: 0
Hallo Zusammen,

[yab 1.7.2]
[Haiku-OS hrev48444 gcc2hy]

wenn man in yab den system-Befehl benutzt, kann man sich natürlich super Informationen aus dem System holen und diese in ein VIEW oder TEXT CONTROL oder ähnliches schreiben :-)

Aber nun meine eigentliche Frage: kann man sich bei einigen Befehlen, welche permanent Rückgabewerte liefern, die Ausgabe dieser auch in einen VIEW schreiben?

Als Beispiel mal der Befehl top, welcher ständig aktualisiert Werte liefert.
Nun möchte ich die Ausgabe der Befehle in einen VIEW schreiben (lassen), aber eben auch ständig aktualisiert.

Hat da jemand Erfahrungen oder mglw. ein Beispielquelltext?

Gruß,
prOSy

PS.: Lieber Admin, kannst Du bitte eine neue Kategorie im Forum für allgemeine Fragen zu yab anlegen? ;)
Letzte Änderung: 2 Jahre 2 Monate her von prOSy.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

system$ - Befehl und die Rückgabe 2 Jahre 2 Monate her #5613

  • lelldorin
  • OFFLINE
  • Administrator
  • Beiträge: 407
  • Dank erhalten: 5
  • Punkte: 39810
  • Karma: 2
  • Honar Medal Silver Honor Medal Bronze Honor Medal Gold
Hallo prOSy,

habe leider die Ausgabe von "top" nicht auf die Schnelle in einen Array speichern können, aber das folgende Beispiel zeigt wie man mit dem DRAW TEXT Befehl und dem DRAW FLUSH Befehl in einer Loop eingebunden, die Ausgabe von "ifconfig" auf einen View schreibt:

#!/boot/home/config/bin/yab 

window open 100,100 to 500,500, "MainWindow", "Top Befehl Ausgabe auf einen View"
	DRAW FLUSH "MainWindow"
	DRAW TEXT 5,15, system$("ifconfig"), "MainWindow"

dim TopArray$(1)
dim part$(1)

inloop = true

while(inloop)
	x=x+1
	msg$ = message$
	
	if (split(msg$, part$(), ":|") > 2) then
		PartOne$=part$(1)
		PartTwo$=part$(2)
		PartThree$=part$(3)
	fi

	if (split(msg$, part$(), ":|") > 3) then
		PartFour$ = part$(4)
	fi

	if (msg$ <> "") print msg$
		
	switch msg$	
	
	
			default:

	end switch
	

	if(window count<1) inloop = false

	sleep 0.1
	if(x=40)then
		DRAW FLUSH "MainWindow"
		DRAW TEXT 5,15, system$("ifconfig"), "MainWindow"
		x=0
	elseif(x=39)then
		DRAW FLUSH "MainWindow"
	endif
wend

Vermutlich musst Du für den "top" Befehl die Ausgabe erst einmal einer textdatei speichern und diese dann regelmäßig auslesen.
top > /boot/home/example-top
Letzte Änderung: 2 Jahre 2 Monate her von lelldorin.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

system$ - Befehl und die Rückgabe 2 Jahre 2 Monate her #5614

  • lelldorin
  • OFFLINE
  • Administrator
  • Beiträge: 407
  • Dank erhalten: 5
  • Punkte: 39810
  • Karma: 2
  • Honar Medal Silver Honor Medal Bronze Honor Medal Gold
PS.: Lieber Admin, kannst Du bitte eine neue Kategorie im Forum für allgemeine Fragen zu yab anlegen? ;)[/quote]

Aber es gibt doch den allgemeinen "yab" Bereich im Forum, der genau dafür gedacht ist. Habe deine Beiträge dorthin verschoben.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

system$ - Befehl und die Rückgabe 2 Jahre 2 Monate her #5615

  • lelldorin
  • OFFLINE
  • Administrator
  • Beiträge: 407
  • Dank erhalten: 5
  • Punkte: 39810
  • Karma: 2
  • Honar Medal Silver Honor Medal Bronze Honor Medal Gold
Hier eine Lösung mit einer Textedit als Ausgabe:
Programname$="Example top command output in yab"
Developer$="Lelldorin"

screenWidth = peek("desktopwidth")
screenHeight = peek("desktopheight")

ProgramFolder$="/boot/home/Desktop/for_prOSy"

WINDOW OPEN screenWidth/2-400,screenHeight/2-300 TO screenWidth/2+400,screenHeight/2+300, "TopCommandOutput", "Example top command output in yab" 
	TEXTEDIT 5,5 TO 795,565, "TE:Output", 1, "TopCommandOutput"
	
	DRAW TEXT 5,585, "counter to reload (40):0", "TopCommandOutput"
looprun=30

//Main Loop	
dim part$(1)

inloop = true

while(inloop)
	looprun=looprun+1
	DRAW FLUSH "TopCommandOutput"
	DRAW TEXT 5,585, "counter to reload (40):"+str$(looprun), "TopCommandOutput"
	//print looprun
	msg$ = message$
	//print looprun 
	
	
	if (split(msg$, part$(), ":|") > 2) then
		PartOne$=part$(1)
		PartTwo$=part$(2)
		PartThree$=part$(3)
	fi

	if (split(msg$, part$(), ":|") > 3) then
		PartFour$ = part$(4)
	fi

	if (msg$ <> "") print msg$
	

	switch msg$
	
	case PartOne$+":_QuitRequested|"
		WINDOW CLOSE PartOne$ 
		break
		
		

		
	
	default:

	end switch
	
	if(looprun=40)then
		//print "here"
		//i=0
		if(IfExists("/boot/home/config/settings/top_output")) then
			output$=system$("rm -r /boot/home/config/settings/top_output_temp")
		else
		endif
		output$=system$("top > /boot/home/config/settings/top_output_temp&kill top")
		wait 2
		output$=system$("cp /boot/home/config/settings/top_output_temp /boot/home/config/settings/top_output")
	elseif(looprun>40)then
		TEXTEDIT CLEAR "TE:Output"
		//print "loop ab:" +str$(looprun)
		//wait 2
		readout=open("/boot/home/config/settings/top_output", "r")
		while (not EOF(readout))
			x=x+1
			print "x:"+str$(x)
			dim ReadTopCommandOutput$(x)
				line input #readout b$
				ReadTopCommandOutput$(x)=b$	
				for i = 1 to readout
					//print "i:"+str$(i)
					TEXTEDIT ADD "TE:Output", ReadTopCommandOutput$(i)+"\n"					
				next i
		wend
		i=0
		x=0
		looprun=0
	else
		
	endif

	if(window count<1) inloop = false

	sleep 0.1
	

wend

sub IfExists(filename$)
     return not system("test -e "+filename$)
end sub
Der Administrator hat öffentliche Schreibrechte deaktiviert.

system$ - Befehl und die Rückgabe 2 Jahre 2 Monate her #5616

  • lorglas
  • OFFLINE
  • Moderator
  • Beiträge: 302
  • Punkte: 26800
  • Karma: 0
  • Honor Medal Gold Honar Medal Silver Honor Medal Bronze
Hallo Prosy,

leider ist es wohl nicht möglich die Ausgabe direkt in yab einzulesen. Selbst wenn man versucht den Datenstrom umzulenken ist es nicht möglich.
Es liegt einfach an dem Befehl top.

Kannst du für dein Projekt auch ps verwenden?

Gruß Lorglas
Der Administrator hat öffentliche Schreibrechte deaktiviert.

system$ - Befehl und die Rückgabe 2 Jahre 1 Monat her #5618

  • lorglas
  • OFFLINE
  • Moderator
  • Beiträge: 302
  • Punkte: 26800
  • Karma: 0
  • Honor Medal Gold Honar Medal Silver Honor Medal Bronze
Hallo prOSy,

anbei eine Variante zu deiner Abfrage, ob der Prozess läuft:
Die sub lässt du im Default deiner switch laufen, ungefähr so.
Die switch habe ich nicht probiert, die Sub funktioniert.
switch (msg$)
       default:
                if (durchlauf=10) then
                     durchlauf=0
		     muscled()
                else
                     durchlauf=durchlauf+1
               endif
	break
end switch

print muscled_isrunning


sub muscled()
	dim program$(1)
	program_running$=system$("ps")
	anzahl_zeilen=split(program_running$, program$(), "\n")
	for i = 1 to anzahl_zeilen
		find=instr(program$(i),"muscled",0)
		if (find>0) then
			muscled_isrunning=1
			break			
		else
			muscled_isrunning=0
		endif
	next i
end sub
Letzte Änderung: 2 Jahre 1 Monat her von lorglas.
Der Administrator hat öffentliche Schreibrechte deaktiviert.
Ladezeit der Seite: 0.422 Sekunden
Powered by Kunena Forum ::