background process output to screen area?

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • thunder7
  • Registratie: Januari 2003
  • Laatst online: 21:00

thunder7

houten vaas/schaal nodig?

Topicstarter
Is er een programma waarmee ik in linux op de command line interface kan opgeven dat de output van een achtergrondproces naar een specifiek gedeelte van het scherm moet?

Dus iets als

opdracht | toscreen --left=5 --top=5 --width=80 --height=10 &

om aan te geven dat alle output van 'opdracht' naar een 80x10 vierkant op positie 5,5 moet ?

Er zijn patches voor tmux voor een popup-window (maar dan wordt alleen dat window actief, en kan er dus buiten dat window niets gebeuren), er is een gnu dialog tailbox, maar die kent alleen line output en de output van opdracht bevat ook \r om progress op dezelfde regel weer te geven.

Kent iemand zo iets?

hout-nerd - www.hetmooistehout.nl of www.houtenschalen.nl

Beste antwoord (via thunder7 op 13-06-2022 13:33)


  • MartinMeijerink
  • Registratie: Juli 2008
  • Laatst online: 15:17

MartinMeijerink

Computerrorist

Als je gewoon de output naar test.log doet, dan zorgt onderstaande one-liner dat de laatste 10 regels van test.log in het veld 80x10+5+5 komt, en elke seconde wordt geüpdatet :Y

code:
1
(while :;do printf '\e7';r=5;while read;do printf '\e['$r';5H%-80.80s' "$REPLY";r=$[r+1];done <<< $(tail test.log);printf '\e8';sleep 1;done) &


Hier ff demo, getest met /var/log/syslog:
Afbeeldingslocatie: https://tweakers.net/i/LpFqkQeVpSipGgVHUA8nSpjeyR4=/800x/filters:strip_exif()/f/image/5A6eAjdVdo6qqKqVnAiOr8eg.png?f=fotoalbum_large

An unbreakable toy is useful to break other toys

Alle reacties


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 21:43

Hero of Time

Moderator LNX

There is only one Legend

Output naar een log sturen en die tailen in een los venster? En anders het proces op de voorgrond laten draaien in het venster. Het is iig niet zo eenvoudig om output naar een terminal te sturen die er nog niet is. Je zou dan een logger device moeten maken en die in dat nieuwe venster openen, wat dus praktisch hetzelfde doet als naar een bestand schrijven en die tailen. Je kan echter niet terug scrollen om te zien wat er een minuut geleden gebeurde.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • thunder7
  • Registratie: Januari 2003
  • Laatst online: 21:00

thunder7

houten vaas/schaal nodig?

Topicstarter
Klopt, ik kan het programma (ffplay in dit geval, de muziekspeler van ffmpeg) foppen dat hij in een tty draait en met >test.log 2>&1 de output naar test.log sturen. Als ik die tail -f zie ik inderdaad de output alsof het programma direct draait, dat klopt. Maar dan is het probleem slechts verplaatst, want hoe krijg ik dan de output van tail -f op de juiste plek op het scherm?
Ik zou natuurlijk een script/programma kunnen maken dat de binnenkomende karakters leest en scrollen, regeleinde of ^M karakters goed verwerkt.

[ Voor 16% gewijzigd door thunder7 op 11-06-2022 13:18 ]

hout-nerd - www.hetmooistehout.nl of www.houtenschalen.nl


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 21:43

Hero of Time

Moderator LNX

There is only one Legend

Je vraag is dus eerder hoe je een terminal of bepaalde informatie op een specifieke plek krijgt, dan wat het moet tonen. Dat is an sich redelijk eenvoudig, want informatie lees je in principe altijd via een GUI. Systemen met alleen een text console zijn over 't algemeen headless en bevatten dus geen monitor.

Btw, als je iets van 80x10 wilt weergeven en je hebt de standaard console voor je neus, dan houd je nog maar 14 regels over, want de grootte is zonder KMS namelijk 80x24. Denk niet dat je zoveel 'ruimte' wilt verspillen om iets simpels weer te geven.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • Brahiewahiewa
  • Registratie: Oktober 2001
  • Laatst online: 30-09-2022

Brahiewahiewa

boelkloedig

thunder7 schreef op zaterdag 11 juni 2022 @ 13:17:
... want hoe krijg ik dan de output van tail -f op de juiste plek op het scherm?...
Door tail -f in een andere terminal sessie te starten en dat window op de juiste plaats te zetten? Ik bedoel: je hebt een multi-user OS; gebruik het dan ook

QnJhaGlld2FoaWV3YQ==


Acties:
  • 0 Henk 'm!

  • thunder7
  • Registratie: Januari 2003
  • Laatst online: 21:00

thunder7

houten vaas/schaal nodig?

Topicstarter
'window op de juist plaats zetten' - in een CLI omgeving? Ik heb een SSH verbinding, daar zie ik dat niet zo 1-2-3 gebeuren.

hout-nerd - www.hetmooistehout.nl of www.houtenschalen.nl


Acties:
  • 0 Henk 'm!

  • DukeBox
  • Registratie: April 2000
  • Nu online

DukeBox

loves wheat smoothies

Met een shell wrapper zou dat kunnen maar dat moet je dan wel zelf bouwen.

Duct tape can't fix stupid, but it can muffle the sound.


Acties:
  • 0 Henk 'm!

  • Glewellyn
  • Registratie: Januari 2001
  • Laatst online: 14-09 19:18

Glewellyn

is er ook weer.

Kijk eens naar tmux of wemux.

*zucht*


Acties:
  • 0 Henk 'm!

  • MartinMeijerink
  • Registratie: Juli 2008
  • Laatst online: 15:17

MartinMeijerink

Computerrorist

ANSI Escape Sequences gebruiken:
code:
1
printf '\e7\e[5;5Hmekker blaat\e8'

Wat dit doet is:
* huidige cursorpositie opslaan
* naar pos 5,5 gaan en daar regel tekst printen
* cursorpositie herstellen
Afbeeldingslocatie: https://tweakers.net/i/S2tql0O3sMVpjxGpJHkjz2Kk3lY=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/becDUKyC7eoZwQKvry4piyMY.png?f=user_large

An unbreakable toy is useful to break other toys


Acties:
  • 0 Henk 'm!

  • thunder7
  • Registratie: Januari 2003
  • Laatst online: 21:00

thunder7

houten vaas/schaal nodig?

Topicstarter
klopt, die ken ik, iets leesbaarder als tput cup 24 1 voor regel 24 pos 1. Maar dat kun je slecht integreren in continue output van een background proces. Het idee om met tmux een aparte pane te maken o.i.d. lijkt me nog het beste, maar de syntax om dat met tpane te doen vind ik ingewikkeld en het is me ook nog niet helemaal duidelijk hoe de communicatie tussen foreground en background proces dan het beste ingericht kan worden.

hout-nerd - www.hetmooistehout.nl of www.houtenschalen.nl


Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • MartinMeijerink
  • Registratie: Juli 2008
  • Laatst online: 15:17

MartinMeijerink

Computerrorist

Als je gewoon de output naar test.log doet, dan zorgt onderstaande one-liner dat de laatste 10 regels van test.log in het veld 80x10+5+5 komt, en elke seconde wordt geüpdatet :Y

code:
1
(while :;do printf '\e7';r=5;while read;do printf '\e['$r';5H%-80.80s' "$REPLY";r=$[r+1];done <<< $(tail test.log);printf '\e8';sleep 1;done) &


Hier ff demo, getest met /var/log/syslog:
Afbeeldingslocatie: https://tweakers.net/i/LpFqkQeVpSipGgVHUA8nSpjeyR4=/800x/filters:strip_exif()/f/image/5A6eAjdVdo6qqKqVnAiOr8eg.png?f=fotoalbum_large

An unbreakable toy is useful to break other toys


Acties:
  • 0 Henk 'm!

  • thunder7
  • Registratie: Januari 2003
  • Laatst online: 21:00

thunder7

houten vaas/schaal nodig?

Topicstarter
Heel gaaf.
Bij mij in een putty-sessie komen de regels links en niet op positie 5, maar dat is slechts een detail.

Eens even kijken of ik .e.e.a. uit elkaar kan peuren:

$REPLY bevat in Bash de laatst ingelezen regel (van read hier dus).
\e7 is <esc>7 = save current cursor pos (zie http://manpages.ubuntu.co...man4/console_codes.4.html
printf '\e['$r';12H = print op positie y 5 x 12
\e8 restore cursor position
de output van tail is standaard 10 regels

vooral het herhalen van tail op de log vind ik een uitkomst; erg goed plan.

Het enige jammere is dat ffplay de voortgang aangeeft door een tijd met ^M uit te voeren, en die regel door tail niet opgepikt wordt (omdat er geen linefeed achter de regel aan komt). Daar ga ik nog eens over nadenken...

hout-nerd - www.hetmooistehout.nl of www.houtenschalen.nl


Acties:
  • 0 Henk 'm!

  • MartinMeijerink
  • Registratie: Juli 2008
  • Laatst online: 15:17

MartinMeijerink

Computerrorist

Daar doe ik het voor. :)
Bij mij in een putty-sessie komen de regels links en niet op positie 5, maar dat is slechts een detail.
Misschien werkt het als je in plaats van de H (hoofdletter) een f (kleine letter) gebruikt? Dat zou hetzelfde moeten doen, wellicht kent PuTTY alleen deze variant. Of je moet in de config van PuTTY wat rommelen in de category Terminal ofzo?
vooral het herhalen van tail op de log vind ik een uitkomst; erg goed plan.
Kleine 'waarschuwing' moet ik hierbij mss wel maken, want ik weet niet wat je in het hoofdscherm allemaal doet verder, maar je moet er wel rekening mee houden dat elke seconde de cursor tijdelijk (enkele milliseconden) niet op de juiste plek staat, het kán dus een keer voorkomen dat als je aan het tikken bent, deze tekst niet in het hoofdscherm komt, maar in onze speciale screen area.
Het enige jammere is dat ffplay de voortgang aangeeft door een tijd met ^M uit te voeren, en die regel door tail niet opgepikt wordt (omdat er geen linefeed achter de regel aan komt). Daar ga ik nog eens over nadenken...
Is makkelijk op te lossen met het commando "tr", achter "tail test.log", zo dus:
code:
1
[(while :;do printf '\e7';r=5;while read;do printf '\e['$r';5H%-80.80s' "$REPLY";r=$[r+1];done <<< $(tail test.log|tr "\r" "\n");printf '\e8';sleep 1;done) &

An unbreakable toy is useful to break other toys

Pagina: 1