如何从Ant构建脚本执行交互式应用程序?

时间:2011-06-10 07:44:22

标签: ant console exec task interactive

来自http://ant.apache.org/manual/Tasks/exec.html

  

请注意,您无法与之互动   分叉程序,唯一的发送方式   输入是通过输入和   inputstring属性。另请注意   自从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运行时:

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

mysql:
Enter password:

BUILD SUCCESSFUL
Total time: 2 seconds

输入密码后,会立即退出。

将此与直接在shell上执行时发生的情况(预期行为)进行比较:

$ 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 个答案:

答案 0 :(得分:1)

您可以通过shell启动命令,将标准输入/输出/错误从/到/重定向到/dev/tty,这对应于进程的controlling terminal

<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>

答案 1 :(得分:-1)

我试过在cosnole上运行,如果你不叉它就行了。 正如文档中所提到的那样。

除了eclipse之外,还有其他配置inputhandler的方法。

正如在此承认的那样。 http://www.coderanch.com/t/419646/tools/java-program-accept-user-input

一种干净的方式来完成这项工作 http://www.myeclipseide.com/PNphpBB2-viewtopic-t-25337.html