Windows XP: Start der Skripts mit Explorer
Thomas
- perl
Hallo,
meine Frage bezieht sich nur indirekt auf PERL, aber vielleicht kennt ja doch jemand eine Lösung.
Ich habe Windows XP und möchte meine PERL-Skripts durch bequemes Anklicken der Skriptdate.pl im Explorer starten, also ohne vorigen Aufruf der Eingabeaufforderung cmd.exe
Das ist für die Navigation zwischen den Verzeichnissen flotter und funktioniert, da ich der Dateierweiterung .pl den Perlinterpreter perl.exe zugewisen habe.
Einziges Problem: Das Ausgabefenster verschwindet sofort, nachdem das PERL-Skript beendet wurde, auch wenn da Ausgabetext oder Fehlermeldungen des Skripts waren: Wie kann ich dieses Fenster geöffnet halten?
Hi,
Einziges Problem: Das Ausgabefenster verschwindet sofort, nachdem das PERL-Skript beendet wurde, auch wenn da Ausgabetext oder Fehlermeldungen des Skripts waren: Wie kann ich dieses Fenster geöffnet halten?
Am einfachsten ist es wohl, wenn du in die letzte Zeile deines Scripts
system("pause");
schreibst.
Dein Script funktioniert dann jedoch nichtmehr unter Linux, da pause ein Windows-spezifischer Befehl ist.
mfG,
steckl
Hallo steckl!
Dein Script funktioniert dann jedoch nichtmehr unter Linux, da pause ein Windows-spezifischer Befehl ist.
aber sleep(60);? Hält das Skript eine Minute an, reicht wohl, die Ausgabe zu überprüfen...
Viele Grüße aus Frankfurt/Main,
Patrick
Hi,
aber sleep(60);? Hält das Skript eine Minute an, reicht wohl, die Ausgabe zu überprüfen...
... und wenn nicht kann man ja auch eine größere Zahl verwenden. Wenn man genug hat kann man ja immernoch das Fenster schließen.
mfG,
steckl
Hallo steckl!
... und wenn nicht kann man ja auch eine größere Zahl verwenden. Wenn man genug hat kann man ja immernoch das Fenster schließen.
Tja, was hat man schneller (Fingerfertigkeit):
[Strg] + [C] -> Terminating on signal SIGINT(2)
oder [alt] + [F4]?
;)
Viele Grüße aus Frankfurt/Main,
Patrick
Hallo Stefan, hallo Patrick,
... und wenn nicht kann man ja auch eine größere Zahl verwenden. Wenn man genug hat kann man ja immernoch das Fenster schließen.
Tja, was hat man schneller (Fingerfertigkeit):
[Strg] + [C] -> Terminating on signal SIGINT(2)
oder [alt] + [F4]?
warum Skripte ändern, wenn es auch ohne Änderungen möglich ist?
https://forum.selfhtml.org/?t=165084&m=1076339
Freundliche Grüße
Vinzenz
Hi,
Tja, was hat man schneller (Fingerfertigkeit):
[Strg] + [C] -> Terminating on signal SIGINT(2)
oder [alt] + [F4]?;)
Wenn man nur die Windows-Oberflächen gewohnt ist und dort hauptsächlich mit der Maus rumfährt ist man vielleicht sogar schneller, wenn man das Fenster mit dem X rechts oben schließt. Natürlich vorausgesetzt, man hat die Zeigergeschwindigkeit entsprechend hoch eingestellt. Durch die Option "Zeigerbeschleunigung verbessern" kann man vielleicht sogar noch bessere Erbebnisse erzielen. ;)
mfG,
steckl
Hallo steckl!
Natürlich vorausgesetzt, man hat die Zeigergeschwindigkeit entsprechend hoch eingestellt. Durch die Option "Zeigerbeschleunigung verbessern" kann man vielleicht sogar noch bessere Erbebnisse erzielen. ;)
Die ist bei mir auf Maximum eingestellt. Und da auch noch jedes Fenster den Fokus bekommt, wenige Millisekunden nach dem der Mauszeiger über das Fenster ist (spart mir einen Klick), irritiert es jeden, der mal an meinem Rechner schnell was gucken will, und das nicht kennt ;)
Aber, wenn die Finger eh schon auf der Taste sind, dürfte [strg] und [C] schneller sind. Blitzschnell die Entscheidung treffen, was erreiche jetzt am schnellsten, wo ist meine Hand (LOL)? ;)
Viele Grüße aus Frankfurt/Main,
Patrick
Hallo
Einziges Problem: Das Ausgabefenster verschwindet sofort, nachdem das PERL-Skript beendet wurde, auch wenn da Ausgabetext oder Fehlermeldungen des Skripts waren: Wie kann ich dieses Fenster geöffnet halten?
schon mal mit CMD /K probiert?
siehe CMD /?
Freundliche Grüße
Vinzenz
schon mal mit CMD /K probiert?
siehe CMD /?
habe ich schon gelesen, wäre aber besser wenn sich der Skriptaufruf mit einem eizigen Klick auf die Skriptdatei im Explorer starten liese.
Hallo
schon mal mit CMD /K probiert?
siehe CMD /?habe ich schon gelesen, wäre aber besser wenn sich der Skriptaufruf mit einem eizigen Klick auf die Skriptdatei im Explorer starten liese.
Ja, wo ist denn das Problem?
"C:\Windows\System32\CMD.EXE" /K "C:\Programme\Python25\python.exe "%1" %*"
(Eingestellt in den Ordneroptionen -> Dateitypen -> (Auswahl) -> Erweitert)
läßt mich aus dem Explorer heraus per Doppelklick Python-Programme in einer sich nicht schließenden Kommandozeile ausführen. Ich kann mir nicht vorstellen, dass das mit Perl nicht gehen sollte.
Freundliche Grüße
Vinzenz
Hallo Vinzenz!
"C:\Windows\System32\CMD.EXE" /K "C:\Programme\Python25\python.exe "%1" %*"
(Eingestellt in den Ordneroptionen -> Dateitypen -> (Auswahl) -> Erweitert)
Schön und gut, aber poppt dann nicht die cmd.exe auf, wenn man ein Skript über die CGI-Schnittstelle eines lokalen Webservers aufruft?
Viele Grüße aus Frankfurt/Main,
Patrick
Hallo
"C:\Windows\System32\CMD.EXE" /K "C:\Programme\Python25\python.exe "%1" %*"
(Eingestellt in den Ordneroptionen -> Dateitypen -> (Auswahl) -> Erweitert)Schön und gut, aber poppt dann nicht die cmd.exe auf, wenn man ein Skript über die CGI-Schnittstelle eines lokalen Webservers aufruft?
weiß ich nicht, nutze ich nicht unter Windows, dafür gibt's Linux :-)
Meine Antwort galt exakt dem Problem des OP.
Freundliche Grüße
Vinzenz
"C:\Windows\System32\CMD.EXE" /K "C:\Programme\Python25\python.exe "%1" %*"
(Eingestellt in den Ordneroptionen -> Dateitypen -> (Auswahl) -> Erweitert)läßt mich aus dem Explorer heraus per Doppelklick Python-Programme in einer sich nicht schließenden Kommandozeile ausführen.
Super, vielen Dank, genau so habe ich mir das vorgestellt. Statt der Python-Zeile genügt bei mir perl "%1", da die perl.exe im Pfad ist.
Das %* ist mir schon manchmal aufgefallen, was bedeutet es hier?
gudn tach!
"C:\Windows\System32\CMD.EXE" /K "C:\Programme\Python25\python.exe "%1" %*"
(Eingestellt in den Ordneroptionen -> Dateitypen -> (Auswahl) -> Erweitert)
läßt mich aus dem Explorer heraus per Doppelklick Python-Programme in einer sich nicht schließenden Kommandozeile ausführen.
ist eine seltsame verschachtelung der anfuehrungszeichen. sieht das MS so vor?
hat das was mit dem abschnitt ueber die anfuehrungszeichen aus dem bloeden manual "cmd /?" zu tun, bei dem ich mir immer noch nicht sicher bin, ob ich ihn richtig verstanden habe?
"C:\Windows\System32\CMD.EXE" /K
bis hierhin stimme ich zu (obgleich die anfuehrungszeichen hier ueberfluessig sind), aber
"C:\Programme\Python25\python.exe "%1" %*"
macht mich der verschachtelten anfuehrungszeichen wegen stutzig.
erwartet haette ich:
C:\Programme\Python25\python.exe "%1" %*
ohne die umschliessenden anf.zeichen.
Das %* ist mir schon manchmal aufgefallen, was bedeutet es hier?
%* steht fuer _alle_ parameter, ist also die kurzschreibweise von %1 %2 %3 ...
nun koennte man auf die idee kommen, einfach
C:\Programme\Python25\python.exe %*
zu benutzen. das schlaegt allerdings fehl, sobald die auszufuehrende datei leerzeichen enthaelt. der erste parameter sollte deshalb in anfuehrungszeichen gesetzt werden.
C:\Programme\Python25\python.exe "%*"
waere aber auch doof, weil dann alle parameter zusammen als dateiname interpretiert werden wuerden.
deshalb schreibt man wohl am besten
C:\Programme\Python25\python.exe "%1" %*
%* ist dann die kurzform von
%2 %3 %4 ...
prost
seth
Hallo seth,
"C:\Windows\System32\CMD.EXE" /K "C:\Programme\Python25\python.exe "%1" %*"
ist eine seltsame verschachtelung der anfuehrungszeichen. sieht das MS so vor?
hat das was mit dem abschnitt ueber die anfuehrungszeichen aus dem bloeden manual "cmd /?" zu tun, bei dem ich mir immer noch nicht sicher bin, ob ich ihn richtig verstanden habe?
"C:\Programme\Python25\python.exe "%1" %*"
macht mich der verschachtelten anfuehrungszeichen wegen stutzig.erwartet haette ich:
C:\Programme\Python25\python.exe "%1" %*
ohne die umschliessenden anf.zeichen.
Hmm, nein. Der gesamte Aufruf ist der Parameter, der CMD übergeben wird, daher
die umschließenden Anführungszeichen. Die Anführungszeichen um %1 sind für Dateien aus Verzeichnissen mit Leerzeichen im Pfad notwendig.
Warum diese nicht nochmals maskiert werden müssen, hängt mit der seltsamen
Behandlung von Anführungszeichen zusammen, die ich einerseits auch nicht ganz
verstanden habe, aber mein Test mit Python funktionierte erst mit einfachen
Anführungszeichen innerhalb der einfachen Anführungszeichen.
Freundliche Grüße
Vinzenz
Moin!
Einziges Problem: Das Ausgabefenster verschwindet sofort, nachdem das PERL-Skript beendet wurde, auch wenn da Ausgabetext oder Fehlermeldungen des Skripts waren: Wie kann ich dieses Fenster geöffnet halten?
Wie wäre es denn mit folgenden letzten Zeilen in deinen Skripten:
print "Bitte ENTER drücken zum Beenden des Programms ...\n";
<STDIN>
Viele Grüße,
Robert Bienert
Moin Moin!
print "Bitte ENTER drücken zum Beenden des Programms ...\n";
<STDIN>
Hilft nicht so wirklich, wenn das Programm in die() reinläuft. In einem END-Block funktioniert das aber. Also:
~~~perl
END {
print "Fertig!\n";
$_=<STDIN>;
}
Etwas eleganter ist es, die Filepositionen von STDOUT und STDERR zu prüfen, und nur auf einen Tastendruck zu warten, wenn wirklich etwas geschrieben wurde:
END {
if ((tell(STDOUT)>0) or (tell(STDERR)>0)) {
print "Fertig!\n";
$_=<STDIN>;
}
}
I/O-Redirection fällt damit natürlich noch auf die Nase. Wenn STDIN kein Terminal ist, sollte man besser nicht am Programmende von STDIN lesen. Ebenso sollte man nicht zusätzliches Zeug nach STDOUT
schreiben, wenn STDOUT umgeleitet ist:
END {
if ((-t STDIN) && (-t STDOUT) && ((tell(STDOUT)>0) or (tell(STDERR)>0))) {
print "Fertig!\n";
$_=<STDIN>;
}
}
Alexander