我想运行一个命令,提示我输入yes/no或y/n或者其他什么.如果我只是运行命令local("my_command")
然后它停止并要求我输入.当我输入所需内容时,脚本继续工作.如何自动响应提示?
我run()
使用我的私钥对在远程服务器上成功命令.
但是,我想git clone ssh://private/repo
在远程服务器上使用我的本地密钥(或使用我所在的本地ssh代理).
怎么用面料呢?
我正在远程机器上运行命令:
remote_output = run('mysqldump --no-data --user=username --password={0} database'.format(password))
Run Code Online (Sandbox Code Playgroud)
我想捕获输出,但没有全部打印到屏幕上.最简单的方法是什么?
如何以与shell无关,语言无关的方式从Linux命令行获取当前进程ID(pid)?
pidof(8)
似乎没有选择来获得调用过程' pid
.当然,Bash有$$
- 但是对于我的通用用法,我不能依赖shell(Bash或其他).在某些情况下,我无法编写脚本或可编译程序,因此Bash/Python/C/C++(等)将无法正常工作.
这是一个特定的用例:我想获得pid
运行的,基于Python-Fabric的远程SSH进程(人们可能希望避免假设bash正在运行),以便除其他外我可以复制和/或创建文件和/或具有唯一文件名的目录(如mkdir /tmp/mydir.$$
).
如果我们可以解决特定于Fabric的问题,这会有所帮助 - 但它并不能解决我的长期问题.对于所有未来场景中的通用用法,我只想要一个返回$$
Bash中传递内容的命令.
我正在尝试使用下面的nohup命令使用fabric启动celerycam进程.不幸的是,没有任何事情发生,手动使用相同的命令我可以启动过程但不通过结构.关于我如何解决这个问题的任何建议?
def start_celerycam():
'''Start celerycam daemon'''
with cd(env.project_dir):
virtualenv('nohup bash -c "python manage.py celerycam --logfile=%scelerycam.log --pidfile=%scelerycam.pid &> %scelerycam.nohup &> %scelerycam.err" &' % (env.celery_log_dir,env.celery_log_dir,env.celery_log_dir,env.celery_log_dir))
Run Code Online (Sandbox Code Playgroud) 任何人都有任何Fabric配方,显示如何使用pem文件连接到EC2?
我尝试用这种方式编写它: Python Fabric run命令返回"binascii.Error:不正确的填充"
但是当我执行该run()
函数时,我遇到了一些编码问题.
我一直在使用面料,最近被告知有关调用,所以我看了一下它的文档:
与Ruby的Rake工具和Invoke自己的前任Fabric 1.x一样,它提供了一个干净的高级API,用于运行shell命令和从tasks.py文件定义/组织任务函数.
除非我在调用时遗漏了某些东西和noob,但我发现fabric比invoke更强大,这让我觉得invoke不是替换fabric.我有点困惑.
我做了一个谷歌搜索'面料vs调用',什么都没有,所以在这里问.
我有这个代码(foo
并且bar
是本地服务器):
env.hosts = ['foo', 'bar']
def mytask():
print(env.hosts[0])
Run Code Online (Sandbox Code Playgroud)
当然,每次迭代都会打印foo.
您可能知道,Fabric遍历env.hosts列表并以这种方式对每个列表执行mytask():
fab mytask
Run Code Online (Sandbox Code Playgroud)
不
task
执行时foo
task
执行bar
我正在寻找一种在每次迭代中获取当前主机的方法.
谢谢,
我在进程中间遇到了这个"ImportError:无法导入名称'isMappingType'",以便为Django项目部署fabfile.
这是我的fabfile.py的结构
from __future__ import with_statement
from fabric.api import *
from fabric.contrib.console import confirm
from fabric.contrib.files import append, exists, sed
env.hosts = ["127.0.0.1"]
env.user = raw_input('Please enter user:')
def deploy():
sudo("apt-get update -y")
sudo("apt-get install git -y")
sudo("apt-get install postgresql libpq-dev python-dev python-pip -y")
code_dir = 'backend-directory'
if exists(code_dir):
run('cd %s && git pull' % (code_dir,))
else:
run("git clone git://serveraddress/projects/backend-directory")
with cd(code_dir):
sudo("pip install virtualenv")
run("virtualenv -p /usr/bin/python3.4 venv")
run("source venv/bin/activate")
#sudo("pip install -r requirements/dev.txt")
sudo("pip install -r requirements/production.txt")
with …
Run Code Online (Sandbox Code Playgroud) 我正在使用fabric远程启动微型aws服务器,安装git和git存储库,调整apache配置然后重启服务器.
如果在任何时候,我发布fabfile文件
sudo('service apache2 restart')
或者run('sudo service apache2 restart')
一个停止然后一个开始,该命令显然运行,我得到响应表明apache已经启动,例如
[ec2-184-73-1-113.compute-1.amazonaws.com] sudo: service apache2 start
[ec2-184-73-1-113.compute-1.amazonaws.com] out: * Starting web server apache2
[ec2-184-73-1-113.compute-1.amazonaws.com] out: ...done.
[ec2-184-73-1-113.compute-1.amazonaws.com] out:
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试连接,则拒绝连接,如果我ssh进入服务器并运行
sudo service apache2 status
它说" Apache is NOT running
"
如果sshed,如果运行
sudo service apache start
,服务器启动,我可以连接.还有其他人经历过这个吗?或者是否有人有任何关于我可以在哪里看的提示,在日志文件等中找出已发生的事情.什么都没有apache2/error.log
,syslog
或者auth.log
.
这不是什么大不了的事,我可以解决它.我只是不喜欢这种无声的失败.
fabric ×10
python ×8
apache2.2 ×1
automation ×1
command-line ×1
deployment ×1
django ×1
invoke ×1
linux ×1
python-2.6 ×1
shell ×1
ssh ×1
ubuntu-10.04 ×1