相关疑难解决方法(0)

在Python中使函数的stdout静音而不会破坏sys.stdout并恢复每个函数调用

有没有办法让Python在没有包含像下面这样的函数调用的情况下使stdout静音?

原始破码:

from sys import stdout
from copy import copy
save_stdout = copy(stdout)
stdout = open('trash','w')
foo()
stdout = save_stdout
Run Code Online (Sandbox Code Playgroud)

编辑:更正了Alex Martelli的代码

import sys
save_stdout = sys.stdout
sys.stdout = open('trash', 'w')
foo()
sys.stdout = save_stdout
Run Code Online (Sandbox Code Playgroud)

这种方式有效,但似乎非常低效.有是一个更好的办法.有任何想法吗?

python stdout

46
推荐指数
6
解决办法
4万
查看次数

python进度条使用tqdm不停留在一条线上

我正在尝试运行一个脚本,试图通过puppet管理在centos7系统上安装模块.我想为运行脚本时发生的安装实现进度条.我正在使用tqdm模块来执行此操作.这是我如何实现模块的一个快照:

from tqdm import tqdm
for i in tqdm(commands):
    res = run_apply(i)
Run Code Online (Sandbox Code Playgroud)

这里run_apply()是实际处理运行和应用puppet配置的函数.

到目前为止一切顺利,我得到了一个进度条,但是当执行消息写入控制台时,它一直向下移动到控制台.但是,我需要进度条在控制台的底部保持不变并动态更新,而不会使运行消息干扰条形码.我希望控制台上与执行相关的消息可以随心所欲地进行,但进度条应该从执行开始到结束时保持在底部.

以下是我所看到的:

        File line: 0.00
          Package: 0.05
          Service: 0.19
             File: 0.23
             Exec: 0.23
         Last run: 1470308227
   Config retrieval: 3.90
            Total: 4.60
Version:
           Config: 1470308220
           Puppet: 3.7.3
now here x
result:  2
 38%|??????????????????????????????????????                                                            | 5/13 [00:29<00:51,  6.44s/it]about to:  profiles::install::download_packages
about to run puppet apply --summarize  --detailed-exitcodes --certname puppet -e "include profiles::install::download_packages"
Error: Could not find class profiles::install::download_packages for puppet on node puppet
Error: Could not find class profiles::install::download_packages …
Run Code Online (Sandbox Code Playgroud)

python progress-bar tqdm

16
推荐指数
1
解决办法
2万
查看次数

Python tqdm和打印奇怪的打印输出顺序

我有以下Python 3代码:

from tqdm import tqdm

print("Before")
for _ in tqdm(range(10)): pass
print("After")
Run Code Online (Sandbox Code Playgroud)

我希望得到以下输出到终端:

Before
100%|##########| 10/10 [00:00<?, ?it/s]
After
Run Code Online (Sandbox Code Playgroud)

但是,我得到的是:

100%|##########| 10/10 [00:00<?, ?it/s]
Before
After
Run Code Online (Sandbox Code Playgroud)

即打印输出相对于我的代码以错误的顺序结束.我也试过在调用sys.flush之前和之后调用print,只是为了得到以下输出:

Before
100%|##########| 10/10 [00:00<?, ?it/s]After
Run Code Online (Sandbox Code Playgroud)

另外,改变printtqdm.write行为没有任何影响.

为什么它以这种意想不到的方式表现?

编辑:这个问题是关于在tqdm循环之前或之后使用print函数的特定情况.还有其他类似的问题是关于 tqdm循环中打印消息,而在这种情况下并非如此.

python output tqdm

3
推荐指数
1
解决办法
1049
查看次数

使用 python tqdm 库重定向 stdout 和 stderr

我在 Python 中使用 tqdm 来显示控制台进度条。

我有一个来自另一个库的函数,它偶尔会写入 tqdm 循环内的 stdout 和 stderr。我无法破解该函数的源代码。

虽然此文档展示了如何重定向 sys.stdout,但它不容易推广到 stderr,因为我只能将 stdout 或 stderr 之一传递给file=tqdm 中的参数__init__。请参阅此问题及其接受的答案,以获取说明问题的最少代码。

如何同时重定向stdout和 stderr?

python tqdm

2
推荐指数
1
解决办法
4047
查看次数

标签 统计

python ×4

tqdm ×3

output ×1

progress-bar ×1

stdout ×1