1

我一直在做一个 Python/Django 项目,我刚刚发现了 './manage.py dbshel​​l' 命令。它会读取您的配置文件以获取数据库凭据并为您启动一个数据库 shell。

在底层,Django 使用 Python os.execvp (http://docs.python.org/library/os.html#os.execvp) 函数。我无法在 Java/Ant 中找到任何类似的东西,但我确实发现您可以将正在运行的进程重定向到您的 TTY (mysql > tty),但尝试为此创建任务似乎不起作用。

<target name="test">
    <exec executable="/bin/sh">
        <arg value="-c" />
        <arg value="mysql -u foo -pbar &gt; `tty`" />
    </exec>
</target>

当我运行这个任务时,我没有得到数据库外壳,并且在当前目录中创建了一个名为“not a tty”的文件。

有没有人对我如何从 ant 启动交互式过程有任何其他想法?

4

1 回答 1

2

不确定它是否会让你一路走到那里,但这是互动的开始:

<target name="get-inputs" depends="confirm-props">
    <input message="Enter your DB username:" addproperty="db.user.name" />
    <input message="Enter your DB password:" addproperty="db.user.password" />
    <input message="Enter DB Host:" addproperty="db.server" />
    ...call some other ant process...
</target>

这是用于 SQL 调用的一个:

<target name="db1">
    <sql
        driver="com.mysql.jdbc.Driver"
        url="jdbc:mysql://${db.server}:3306/?useUnicode=true&amp;characterEncoding=UTF-8"
        userid="name"
        password="password"
        classpathref="service.classpath"
    >
        <transaction>
            <![CDATA[
            insert into foo (field1) values ('${foo-value}');
            ]]>
        </transaction>
    </sql>
</target>
于 2011-07-28T16:21:18.293 回答