2011-07-28 8 views
1

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

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から対話型プロセスを起動する方法について、他のアイデアを持っていますか?

+0

execvpのはEXECVの一部(ありますhttp://linux.about.com/library/cmd/blcmdl3_execv.htm)ファミリの関数です。 – Toxygene

答えて

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> 
関連する問題