Как выполнить интерактивное приложение из скрипта сборки Ant? - PullRequest
6 голосов
/ 10 июня 2011

С http://ant.apache.org/manual/Tasks/exec.html:

Обратите внимание, что вы не можете взаимодействовать с раздвоенная программа, единственный способ отправить вход к нему через вход и атрибуты входной строки. Также обратите внимание, что начиная с Ant 1.6, любая попытка прочитать вход в разветвленную программу будет получить EOF (-1). Это изменение от Ant 1.5, где такая попытка заблокирует.

Как мне запустить и взаимодействовать с программой интерактивной консоли из ant?

То, что я хочу сделать, похоже на функциональность drush sqlc , то есть запуск интерпретатора клиента mysql с использованием надлежащих учетных данных базы данных, но не ограничиваясь этим вариантом использования.

Вот пример использования:

<project name="mysql">
  <target name="mysql">
    <exec executable="mysql">
      <arg line="-uroot -p"/>
    </exec>
  </target>
</project>

При запуске с использованием муравья:

$ ant -f mysql.xml mysql
Buildfile: /home/ceefour/tmp/mysql.xml

mysql:
Enter password:

BUILD SUCCESSFUL
Total time: 2 seconds

После ввода пароля он сразу выходит.

Сравните это с тем, что происходит при выполнении непосредственно в оболочке (ожидаемое поведение):

$ mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1122
Server version: 5.1.58-1ubuntu1 (Ubuntu)

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Ответы [ 2 ]

1 голос
/ 08 октября 2013

Вы можете запустить свою команду через оболочку, перенаправив стандартный ввод / вывод / ошибку с / на / на /dev/tty, что соответствует управляющему терминалу процесса.

<target name="dbshell" description="Open a shell for interactive tasks">
  <exec executable="/bin/sh">
    <arg value="-c"/>
    <arg value="mysql -u root -p &lt; /dev/tty &gt; /dev/tty 2&gt; /dev/tty"/>
  </exec>
</target>
0 голосов
/ 03 января 2012

Я попытался запустить на косноле, и если вы не разветвляетесь, это работает. Как уже упоминалось в документе.

Помимо eclipse существуют дополнительные способы настройки обработчика ввода.

Как это признается здесь. http://www.coderanch.com/t/419646/tools/java-program-accept-user-input

Чистый способ получить эту работу http://www.myeclipseide.com/PNphpBB2-viewtopic-t-25337.html

...