Java intercepter l'invite de commande répondre


Je faisais des commandes cmd via java qui ne sont entrées que dans l'invite de commande. Je me demandais s'il y avait un moyen de récupérer par programme et de répondre à une question d'invite de commande via Java?

Par exemple: J'ajoute un référentiel GIT distant à ma structure GIT localement, donc quand j'exécute:

$ git remote add [url],

Un mot de passe m'est demandé. Puis-je attraper ce message (par exemple pour passer le message à l'utilisateur) ET répondre dans la même invite de commande objet de programmation / cmd fenêtre.

(le AND est explicitement là-dedans car il serait inutile d'exécuter la commande ci-dessus, de lire la réponse rapide, de fermer l'invite de commande, d'envoyer un mot de passe via une nouvelle commande cmd dans une nouvelle fenêtre d'invite et donc non liée).

Author: voluminat0, 2012-10-09

2 answers

Si vous exécutez la commande en utilisant Runtime.getRuntime ().exec, capturez / surveillez le flux d'entrée du sous-processus et écrivez dans le flux de sortie pour lui envoyer un message.

Par exemple

    Process process = Runtime.getRuntime().exec("Command ");        
    OutputStream pout = process.getOutputStream();
    PrintWriter pw = new PrintWriter(pout);
    pw.println("Command response here");
 3
Author: Htaras, 2012-10-09 17:19:44

Vous pouvez interagir avec les flux d'entrée / sortie / erreur standard d'une autre commande en utilisant un ProcessBuilder pour démarrer cette commande en tant que Process. Dans ce cas, le processus ne parlera généralement pas directement à une fenêtre de commande, vous devrez donc imprimer sa sortie à l'utilisateur si cela est nécessaire.

Notez que certains processus prennent un soin particulier pas pour lire les mots de passe à partir de l'entrée standard, mais à partir de la fenêtre de la console à la place. Dans ce cas, ce qui précède pourrait ne pas fonctionner. Habituellement, les commandes fournissent des moyens pour spécifier une source différente pour les mots de passe. Dans le cas de git, veuillez rechercher la variable d'environnement GIT_ASKPASS ainsi que le paramètre de configuration core.askpass.

 0
Author: MvG, 2012-10-09 17:07:55