1

私は Python/Django プロジェクトに取り組んでおり、'./manage.py dbshel​​l' コマンドを発見しました。データベース資格情報の構成ファイルを読み取り、データベース シェルを起動します。

内部では、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 に答える