Schrift
[thread]10861[/thread]

Textdatei mit externem Editor öffnen

Leser: 2


<< |< 1 2 >| >> 17 Einträge, 2 Seiten
Gast Gast
 2007-11-22 13:57
#102775 #102775
Hallo,

ich habe ein Perlscript mit einer graphischen Oberfläche.
Wenn ich dort auf einen Knopf drücke, dann möchte ich,
dass eine bestimmte Textdatei mit dem systemspezifischen standard-Editor geöffnet wird (unter Linux).


Allerdings habe ich keine Ahnung, wie ich das machen soll. (Habe erst angefnagne mit Programmieren/Perl)
Ich habe zwar eine Funkion system() gefunden, aber irgendwie will es damit nicht so wirklich klappen.

Ich habe es mal so versucht, aber wie gesagt, funktioniert es leider nicht xD:
Code (perl): (dl )
1
2
3
4
5
6
7
 # Teilname (nummer) der Datei bestimmen ( Log_pack_'nummer'.txt )
 my $pos = $textfield_listing->index(active);
 my $pack = $packetnumber[$pos];
 # den kompletten Pfad in einer Variable abspeichern
 my $location = "/home/blub/Logfiles/Log_pack_$pack.txt";

 system($location);



Würde mich über Tipps / code-Beispiele freuen :)
Gast Gast
 2007-11-22 18:48
#102815 #102815
system() kannst du auf 2 Arten benutzen:
- mit einem Argument: dieses wird dann wie auf der CommandLine behandelt
- mit mehreren Argumenten: das erste bestimmt das aufzurufende Programm, die anderen werden als Argumente an dieses Programm übergeben.

Wie man das Programm herausbekommt, mit dem standardmäßig .txt Dateien geöffnet werden kann ich dir nicht sagen, aber als Workaround kannst du etwas dieser Art verwenden:
Code: (dl )
1
2
3
4
5
6
if ($^O =~ /win/i) {
system( 'notepad', $location );
}
else {
system( 'vi', $location );
}

Allerdings würde ich dir kein system() empfehlen, da du dann auf Prozessende warten musst...
Sieh dir doch mal IPC::Run ( CPAN:IPC::Run ) an.

MfG Horst
Gast Gast
 2007-11-22 22:49
#102847 #102847
nice, damit geht's :)

vielen Dank =)
ptk
 2007-11-22 23:01
#102848 #102848
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Du kannst dir auch mal die edit()-Funktion in CPAN:Tk::Pod::Text anschauen. Beim Thema "Editor starten" kann man sich nämlich austoben: die Environment-Variablen XEDITOR, VISUAL und EDITOR beachten; überprüfen, ob ein Terminal existiert; zwischen Unix und Windows unterscheiden...
Gast Gast
 2007-11-26 11:36
#102996 #102996
hm, also wenn ich run() benutze, dann wartet mein prog trotzdem bis der editor geschlossen wurde :/

gibts da nicht noch was anderes?
Gast Gast
 2007-11-26 11:55
#102998 #102998
ok, ich habe es jetzt mal so versucht:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
use Thread;

my $blub = new Thread \&ssys ;

sub ssys() {

 # den kompletten Pfad in einer Variable abspeichern
 my $location = "./Logfiles/Log_pack_$packetnumber[$pos].txt";
 system ("kate $location");
}


Damit scheint es zu gehen, allerdings bekomme ich dann in der console/shell eine Fehler(?)-meldung:
Attempt to free non-existent shared string '_TK_RESULT_', Perl interpreter: 0x10f5660 at /usr/lib/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi/Tk.pm line 247.

Ist das jetzt ein Problem? denn ich kann mit der Meldung eigentlich nicht wirklich was anfangen.
renee
 2007-11-26 12:35
#103005 #103005
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
*) Threads plus Tk ist etwas tricky
*) statt Thread sollte threads verwendet werden
*) Für das Zusammenspiel mit Tk ist CPAN:POE besser geeignet.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Gast Gast
 2007-11-26 15:16
#103032 #103032
also mit threads bekomme ich immernoch die selbe Meldung.

Das mit dem POE wirkt etwas kompliziert :o undaußerdem muss man dann ja auch ein neues Modul installieren,
was wiederum dazu führt, dass ich mein script nicht einfach so mal schnell auf einem beliebigen PC ausführen kann, sondern eben immmer erst noch Module installieren muss :(
renee
 2007-11-26 15:29
#103035 #103035
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Hast Du die Thread-Geschichten *vor* den Tk-Sachen gemacht?

Kannst Du mal den einen kompletten (aber minimalistisch) Code zeigen, der diese Meldung produziert?
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Gast Gast
 2007-11-26 16:27
#103057 #103057
So, hier mal die relevanten Teile, falls du sonst noch was brauchst, einfach melden.
Danke schonmal, dass du dir die Zeit nimmst :)

Code (perl): (dl )
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
#!/usr/bin/perl
use Tk;
use threads;

my @packetnumber;
my @hostname;
my %pack_status;


my $mw = new MainWindow();
my $mframe = $mw->Frame();
my $textfield_listing = $mframe->ScrlListbox(-scrollbars =>"se");
my $button_log = $mframe->Button(-command=>\&viewLog);

sub viewLog() {
        if ($textfield_listing->curselection()) {
                
                # make a new Thread for the editor-application
                my $editor = threads->create("openLogWEA");
        }
}

sub openLogWEA() {
        
        # get logfile-location
        my @tempvar = $textfield_listing->curselection();
        my $pos = $tempvar[0];
        my $location = "./Logfiles/Log_pack_$packetnumber[$pos].txt";
        
        system("kate $location");
}
<< |< 1 2 >| >> 17 Einträge, 2 Seiten



View all threads created 2007-11-22 13:57.