gpt4 book ai didi

Python Fabric 将输出保存到变量

转载 作者:太空宇宙 更新时间:2023-11-03 14:22:51 24 4
gpt4 key购买 nike

我正在尝试将 Fabric 中 sudo 命令的输出保存到一个变量中,这样我就可以跟踪一个文件。我的代码如下所示:

def tail_pg():
log = StringIO();
sudo('ls -t /var/lib/pgsql/9.3/data/pg_log/| head -n 1', stdout=log)

print type(log), log
sudo('tail -n 25 -f %s' % log, pty=True)

我添加了打印语句作为故障排除的一部分。它返回这些值而不是日志文件名:

<type 'instance'> <StringIO.StringIO instance at 0x10345f638>

我似乎在关注运行的 Fabric 文档(link),但我一定忽略了一些东西。这是我在运行此任务时收到的错误:

[centos] Executing task 'tail_pg'
[centos] sudo: ls -t /var/lib/pgsql/9.3/data/pg_log/| head -n 1

<type 'instance'> <StringIO.StringIO instance at 0x10345f638>
[centos] sudo: tail -n 25 -f <StringIO.StringIO instance at 0x10345f638>
[centos] out: /bin/bash: -c: line 0: syntax error near unexpected token `newline'
[centos] out: /bin/bash: -c: line 0: `tail -n 25 -f <StringIO.StringIO instance at 0x109c313f8>'
[centos] out:


Fatal error: sudo() received nonzero return code 1 while executing!

Requested: tail -n 25 -f <StringIO.StringIO instance at 0x109c313f8>
Executed: sudo -S -p 'sudo password:' /bin/bash -l -c "tail -n 25 -f <StringIO.StringIO instance at 0x109c313f8>"

Aborting.
Disconnecting from centos... done.

最佳答案

你让它变得比它应该的更复杂一点。如果您想捕获它,stdout/stderr kwarg 确实可以将 stderr 发送到 stdout。你可以做类似的事情

def tail_pg():
log = sudo('ls -t /var/lib/pgsql/9.3/data/pg_log/| head -n 1')

print type(log), log
sudo('tail -n 25 -f %s' % log, pty=True)

fabric 将从 run() 和 sudo() 返回标准输出,因此您可以将其捕获到变量中。

关于Python Fabric 将输出保存到变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25195426/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com