Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: Linux Forum Linux-Web.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

26.06.2008, 13:07

[geloest] Rueckgabewert von dialog

Malzeit, alle miteinander!


Ich versuche derzeit mal wieder was, wo ich euf ein klein wenig Hilfe eurerseits angewiesen bin.

Das Problem ist folgendes: Ich moechte von Zeit zu Zeit eine Datei durch ein Skript bearbeiten. Da die Dateien, die bearbeitet werden muessen zwar den gleichen Aufbau haben, aber immer ein wenig anders heiszen, moechte ich am Anfang des Scriptes die zu bearbeitende Datei ueber Dialog auswaehlen. Auf Grund der Tatsache aber, dass ich hauptsaechlich ueber ssh arbeite (natuerlich mit deaktivierter X weiterleitung) muss ich dialog verwenden und kann kein Xdialog nutzen.

Das script wird aus persoenlichen Uebungsgruenden in Perl geschrieben. bisher schauts so aus:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/usr/bin/perl
#
# This script is written by BorneBjoern
# 2008-06-26
#

# setting paths

print `clear`;

$WD="/home/bornebjoern/db";
	$csv="$WD"."/csv";
	$Exp="$WD"."/exports";
	$base="$WD"."/portabase";

	
$temp="/home/bornebjoern/tmp";
$bin="/home/bornebjoern/bin";

# setting other Variables


# printing all Variables and their values to screen

print "\nDer Inhalt von \$WD ist:\t\t",$WD;
print "\nDer Inhalt von \$csv ist:\t",$csv;
print "\nDer Inhalt von \$Exp ist:\t",$Exp;
print "\nDer Inhalt von \$base ist:\t",$base,;
print "\n";
print "\nDer Inhalt von \$temp ist:\t",$temp;

exec "sleep 5 && /usr/bin/dialog --fselect /home/bornebjoern/db/ 0 0 >> $temp/name.log";

print `less $temp/name.log`;


ich habe schon gebastelt und probiert. leider konnte ich derzeit noch nicht erreichen, dass der Rueckgabewert von Dialog (also zBsp: /home/bornebjoern/db/exports/Drucker.csv) irgendwie weiterverarbeitet wird.

Bei der Ausgabe-Umleitung via >> wird alles in die log datei geschickt. Was ziemlich dumm ist, denn das umfasst die Steuerbefehle fuer die Dialogbox.

Ueber

Quellcode

1
2
3
print `"/usr/bin/dialog --fselect /home/bornebjoern/db/ 0 0"`;
exec `"/usr/bin/dialog --fselect /home/bornebjoern/db/ 0 0"`;
$FN=`/usr/bin/dialog --fselect /home/bornebjoern/db/ 0 0"`;
oder allen anderen Versuchen komme ich auch nicht zum Erfolg (soll heiszen zu dem benoetigten Dateinamen)

Der Fehler, bzw das Problem, welches ich habe, aeuszert sich dadurch, dass das kompilieren des perl-skriptes zwar ohne Fehlermeldungen durchlaeuft, aber dann, an der Stelle, wo der Dialog sich oeffnen soll, ich nur noch einen blinkenden Curser sehe, als ob das System auf eine Eingabe wartet oder der Prozess im Hintergrund laufen wuerde. was dann so aussieht:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[12:34:39] bornebjoern (uid=1000) @ lapadm [~]  
> bin/Monitor.pl

Der Inhalt von $WD ist:         /home/bornebjoern/db
Der Inhalt von $csv ist:        /home/bornebjoern/db/csv
Der Inhalt von $Exp ist:        /home/bornebjoern/db/exports
Der Inhalt von $base ist:       /home/bornebjoern/db/portabase

Der Inhalt von $temp ist:       /home/bornebjoern/tmp
Der Inhalt von $FN ist:

^[C
[12:34:50] bornebjoern (uid=1000) @ lapadm [~]  
> _


Vielen Dank im Voraus fuer eure Tips.

Bjoern
for Windows problems: reboot
for Linux problems: be root

2

26.06.2008, 13:49

RE: Rueckgabewert von dialog

Nach einer weiteren halben Stunde des intensiven Verhoers von goolge.de/linux hat mir der Befragte die Loesung verraten.

Alle Werte innerhalb des Dialogprozesses werden auf dem STDERR ausgegeben. daher reicht eine Weiterleitung in eine Datei. Aus diesem Grund muesste das umgesetzt so aussehen:

Quellcode

1
2
exec "/usr/bin/dialog --fselect /home/bornebjoern/db/ 0 0 2> $temp/name.log";
$FN=`less $temp/name.log`;
jetzt musz ich nur noch zusehen, wie ich das hinbekomme, dass ich den Zwischenschritt mit der Datei umgehen kann und den STDERR automatisch mit der Variablen verknuepfen kann.

Haette da vielleicht jemand ne Idee
for Windows problems: reboot
for Linux problems: be root

linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

3

26.06.2008, 13:53

RE: Rueckgabewert von dialog

aha, die antwort wollte ich gerade posten.

warum eigentlich exec, exec tauscht doch den laufenden prozess durch exec aus!!! sinnvoller wäre doch system().
zum auffangen:
man könnte stdout und stderr tauschen und dann mit open(DIAL,"dialog ........ |") den stream abfangen.
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

4

26.06.2008, 14:00

RE: Rueckgabewert von dialog

Zitat

warum eigentlich exec, exec tauscht doch den laufenden prozess durch exec aus!!! sinnvoller wäre doch system().


um ehrlich zu sein, weil ich das mit dem system() nicht wuszte. Ich arbeite mich greade ein wenig ein, bzw beginne perl zu lernen.

Und was den Rest deiner Antwort anbetrifft: :keineahnung:
da braeuchte ich ein wenig mehr input, da ich dir da nicht so recht folgen kann.
for Windows problems: reboot
for Linux problems: be root

linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

5

27.06.2008, 00:02

RE: Rueckgabewert von dialog

also,
du kannst mit

Quellcode

1
open(DIA,"/usr/bin/dialog -fselect /pfad 10 10 |")

einen filedeskriptor öffnen, aus dem du die ausgaben von stdout des kommandos lesen kannst, zb

Quellcode

1
$line=<DIA>


nun gibt aber dialog die bildschirmausgabe auf stdout aus und das ergebnis auf stderr. da muss also ein bischen gedreht werden. man könnte zb einen weiteren descriptor öffnen, der auf das terminal zeigt, in den leitet man die stdout-ausgaben um und den stderr biegst du nach stdout um und fängst ihn mit der perlpipe in open auf, müsste eigentlich funktionieren.
also zb so

Quellcode

1
2
3
open(DIA,"/usr/bin/dialog -fselect /pfad 10 10  2>&1 1>&3 |") or die "Pech";
$line=<DIA>;
print "Dateiname= $line ";
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

6

27.06.2008, 06:25

RE: Rueckgabewert von dialog

hups, habe ich doch die eröffnung des 3. datenkanals vergessen, also

Quellcode

1
open(DIA,"exec 3> $( tty ); /usr/bin/dialog -fselect /pfad 10 10  2>&1 1>&3 |") or die "Pech";


exec macht sinn, wenn du einen prozess forken willst und das ürsprüngliche programm durch ein neues überladen willst, wenn zb ein serverprozess mehrere threads starten soll.
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »linuxerr« (27.06.2008, 06:29)


linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

7

27.06.2008, 17:33

RE: Rueckgabewert von dialog

Zitat

Original von linuxerr
hups, habe ich doch die eröffnung des 3. datenkanals vergessen, also

Quellcode

1
open(DIA,"exec 3> $( tty ); /usr/bin/dialog -fselect /pfad 10 10  2>&1 1>&3 |") or die "Pech";


ähemm,
das und muss natürlich gequotet werden, sonst scheint perl durchzudrehen.

Quellcode

1
open(DIA,"exec 3> \$( tty ); /usr/bin/dialog -fselect /pfad 10 10  2>&1 1>&3 |") or die "Pech";


so, nun hab ich aber genug mit mir selbst geredet. :)
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »linuxerr« (27.06.2008, 17:42)


8

27.06.2008, 18:34

RE: Rueckgabewert von dialog

Zitat

so, nun hab ich aber genug mit mir selbst geredet.


... hast du nicht wirklich.

Obwohl ich nicht dazu gekommen, deinen Vorschlag in die Tat umzusetzen, danke ich dir wiedermal fuer deinen wertvollen Hinweis ( Naja, um ehrlich zu sein es ist ja nicht nur ein Hinweis, sondern viel mehr die Loesung selbst. ;) )

:chinese:

Ich werde das dann mal so bald wie moeglich probieren.

... so denn, ich sach jetzt auch tschuess fuer heute.

Schoenes Wochenende!
for Windows problems: reboot
for Linux problems: be root

linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

9

27.06.2008, 20:15

RE: Rueckgabewert von dialog

alles klar :+++:

wozu hattest du eigentlich das sllep 5 eingefügt?

schönes we!
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

Thema bewerten