2013-01-17 2 views
5

Gibt es eine Möglichkeit zu fangen CTRL + C in Dart-Konsole-Anwendung?Strg + C in Dart-Konsole Anwendung

Drücken Sie zum Beispiel CTRL +C nur brutal statt sauber "Schließen" -Paket an Web-Socket-Clients vom Server zu senden, die Sockets zu schließen.

+0

möglich Duplikat von [Wie SIGINT für den Strom in Dart zu fangen?] (Http://stackoverflow.com/questions/18448306/how-to-catch-sigint-for-the- Current-in-Dart) –

Antwort

2

Ich hatte eine Grabe, und ich denke, dass die Antwort, im Moment ist nein.

Sie können stdin erfassen, zum Beispiel:

import 'dart:io'; 

void main() { 
    stdin.onData =() => print(stdin.read()); 
} 

aber reagiert nicht auf CTRL +C.

Anderswo process.dart (Teil des dart:io Library) definiert verschiedene Signale, wie SIGQUIT und ein onExit() Rückruf, aber dieses Verfahren verwendet wird Kind zu steuern, anstatt den Host-Prozess.

+0

Ich habe fast die gleiche Schlussfolgerung erreicht. Hatte gehofft, dass ich im Host-Prozess onExit definieren konnte, aber das scheint nicht so zu sein. – samiy

+0

Es könnte sich lohnen, eine Feature-Anfrage auf [http://dartbug.com] (http://dartbug.com) zu richten. –

+0

hat das jemand gemacht? – paulecoyote

2

Dieses jetzt

ich den folgenden Testcode bei Unified Diff: tests/standalone/io/signals_test_script.dart

import "dart:io"; 

void main(args) { 
    int usr1Count = int.parse(args[0]); 
    int usr2Count = int.parse(args[1]); 
    var sub1; 
    var sub2; 
    void check() { 
    if (usr1Count < 0 || usr2Count < 0) exit(1); 
    if (usr1Count == 0 && usr2Count == 0) { 
     sub1.cancel(); 
     sub2.cancel(); 
    } 
    print("ready"); 
    } 
    sub1 = ProcessSignal.SIGUSR1.watch().listen((signal) { 
    if (signal != ProcessSignal.SIGUSR1) exit(1); 
    usr1Count--; 
    check(); 
    }); 
    sub2 = ProcessSignal.SIGUSR2.watch().listen((signal) { 
    if (signal != ProcessSignal.SIGUSR2) exit(1); 
    usr2Count--; 
    check(); 
    }); 
    check(); 
} 

Hoffentlich verfügbar gefunden wird dies in Kürze veröffentlicht werden.

Siehe auch How to catch SIGINT for the current in Dart?