2011-07-28 40 views
1

我一直在研究一个Python/Django项目,并且刚刚发现'./manage.py dbshel​​l'命令。它会读取数据库凭证的配置文件并为您启动数据库shell。从ant任务打开数据库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> 

当我运行这个任务,我没有得到一个数据库外壳和一个名为“不是tty”文件是在当前目录中创建。

有没有人有任何其他的想法,我怎么可以从蚂蚁启动一个交互过程?

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