fabric - 自动化stdin输入

时间:2015-01-10 10:33:52

标签: python django fabric

我知道,我想要更多!

我想知道如何在面料中做这样的事情:

def deploy():
   local('git pull origin dev')
   gitusername = "test"
   gitpwd = "testpassword"
   # here render credentials to stdin so that no need to type in in console

   local('python manage.py collectstatic')       
   confirm_type = "yes"
   # here render 'confirm_type' to stdin so that I dont have to type in console

   local('python manage.py migrate')
   local('/etc/init.d/nginx restart')

我想到fabric.operations.prompt,但我不需要提示。我希望该结构从变量中读取凭据并继续进行而不会向我询问任何内容..

任何想法?

1 个答案:

答案 0 :(得分:2)

如结构documentation中所述,使用subprocess通过stdin发送数据(使用的代码来自" how do i write to a python subprocess' stdin"):

from subprocess import Popen, PIPE, STDOUT
p = Popen(['python', 'manage.py', 'collectstatic'], stdout=PIPE, stdin=PIPE, stderr=PIPE)
stdout_data = p.communicate(input='yes')[0]

如果要查看输出,请删除stdout,stderr参数。

另外,在collectstatic的情况下,您可以在不使用管道的情况下指定--noinput参数。