相关疑难解决方法(0)

将两个上下文管理器合二为一

我使用Python 2.7,我知道我可以这样写:

with A() as a, B() as b:
    do_something()
Run Code Online (Sandbox Code Playgroud)

我想提供一个方便的助手,两者都做.此助手的用法应如下所示:

with AB() as ab:
    do_something()
Run Code Online (Sandbox Code Playgroud)

现在AB()应该做两件事:创建上下文A()并创建上下文B().

我不知道如何编写这个便利助手

python contextmanager

19
推荐指数
1
解决办法
1633
查看次数

在Python中重定向FORTRAN(通过F2PY调用)输出

我试图弄清楚如何使用F2PY从我为其生成Python接口的一些FORTRAN代码重定向输出.我试过了:

from fortran_code import fortran_function
stdout_holder = sys.stdout
stderr_holder = sys.stderr
sys.stdout = file("/dev/null","w")
fortran_function()
sys.stdout.close()
sys.stderr.close()
sys.stdout = stdout_holder
sys.stderr = stderr_holder
Run Code Online (Sandbox Code Playgroud)

这是在Python中重定向输出的事实上的方法,但在这种情况下似乎不起作用(即,无论如何都会显示输出).

我确实从2002年发现了一个邮件列表帖子,说"有可能从pts设备读取消息,例如ttysnoop就是这样".关于ttysnoop的信息似乎很难在网上找到(我不认为它已经在很多年内更新;例如,谷歌"ttysnoop"的第一个结果只有到tarball,RPM和.deb的死链接),这个OS X端口的请求收到了响应"没有运气,它需要一些我无法创建的特定于linux的特定功能."

我对如何重定向输出的任何建议持开放态度(它不必使用ttysnoop).

谢谢!

python unix fortran stdout

12
推荐指数
2
解决办法
8635
查看次数

如何控制 fbprophet 的输出?

我希望能够在拟合预测模型的同时抑制来自 fbprophet 的一些输出。此输出(“初始对数联合概率...”、“优化正常终止:”、“检测到收敛:...”等)显然来自 Stan 的 cpp 代码,我找不到任何明显的方法来控制它[我正在使用 python 接口]。深入研究代码发现,verbose=False 作为高级 stan() 例程(在 pystan/api.py 中)中的默认值,但显然此参数不会抑制此打印输出。不修改代码是否可行?

c++ python facebook stan

11
推荐指数
1
解决办法
5091
查看次数

抑制 python 中库导入的输出

我有一个库需要在我的代码中导入。但是,每当导入它时,它都会向控制台输出几行数据。如何抑制输出?

谢谢

python import

7
推荐指数
2
解决办法
3070
查看次数

Numpy / Polyfit - Suppress printing of Intel MKL Error message

polyfit在程序中进行了多次计算,我的一些输入已经np.nan并且将会出现算法问题。我知道这一点,在这个应用程序中我不在乎。

当事情搞砸时,这会打印到控制台:

Intel MKL ERROR: Parameter 4 was incorrect on entry to DELSD.

我只是想抑制这个错误。我已经尝试过:

import warnings
warnings.simplefilter('ignore', np.RankWarning)
warnings.simplefilter('ignore', np.ComplexWarning)
warnings.filterwarnings('ignore', "Intel MKL ERROR")
Run Code Online (Sandbox Code Playgroud)

这会抑制一些警告,但不会抑制 Intel MKL 警告。我只是想阻止它在控制台中打印(因为它破坏了我正在打印的其他状态消息)。

以下内容应该会触发问题:

import numpy as np
def line_fit(R, X):
    num_rows = np.shape(R)[0]
    p = np.zeros(num_rows)
    for i in range(num_rows):
        temp = np.polyfit(R[i, :], X[i, :], 1)
        p[i] = temp[1]
    return p
temp = np.array((((198.652-76.1781j),(132.614-43.8134j),(115.042-41.2485j),(91.7754-39.1649j),(78.8538-37.389j),(67.8769-34.6342j)),
((np.nan),(1671.79-796.522j),(1206.44-824.202j),(654.572-682.673j),(438.175-559.025j),(303.624-452.122j)),
((np.nan-1j*np.nan),(1671.32-794.931j),(1198.71-803.533j),(649.574-624.276j),(443.286-530.36j),(308.609-438.738j))))
R = np.real(temp)
X = np.imag(temp)
coeff = line_fit(R, X)
Run Code Online (Sandbox Code Playgroud)

Python 2.7.6(默认,2013 年 …

python warnings numpy scipy intel-mkl

5
推荐指数
1
解决办法
7424
查看次数

在 Python 中从 OpenCV 调用时静默 h264 解码警告

我有以下脚本,我使用 OpenCV 从 Python3 读取 RTSP 流。

cap = cv2.VideoCapture(ID) ret, frame = cap.read()

这些流使用 h264 进行编码,我收到大量警告和错误消息。

[h264 @ 0x7f74cc430c80] co located POCs unavailable [h264 @ 0x7f74b4258160] error while decoding MB 38 2, bytestream -19

我尝试使用上下文管理器来重定向 stdout 和 stderr 让它们保持沉默,但没有成功:

class SilenceOutput(object):
    def __enter__(self):
        self._original_stdout = sys.stdout
        self._original_stderr = sys.stderr
        sys.stdout = None
        sys.stderr = None

    def __exit__(self, exc_type, exc_val, exc_tb):
        sys.stdout = self._original_stdout
        sys.stderr = self._original_stderr
Run Code Online (Sandbox Code Playgroud)

python logging opencv ffmpeg h.264

5
推荐指数
0
解决办法
2812
查看次数

如何在python中关闭文件描述符?

我在python中有以下代码:

import os


class suppress_stdout_stderr(object):
    '''
    A context manager for doing a "deep suppression" of stdout and stderr in
    Python, i.e. will suppress all print, even if the print originates in a
    compiled C/Fortran sub-function.
       This will not suppress raised exceptions, since exceptions are printed
    to stderr just before a script exits, and after the context manager has
    exited (at least, I think that is why it lets exceptions through).

    '''
    def __init__(self):
        # Open a pair of null files …
Run Code Online (Sandbox Code Playgroud)

unix stdout file python-2.7

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

使用 python 包装器和/或 pyvista 时是否可以静默本机 VTK 日志?

目前,我们使用Python的vtk包装器和Pyvista(一个更Pythonist的vtk包装器)。

在该过程的某些部分,我们有一些来自 .cxx 文件的日志行:

2022-03-17 17:21:56.031 ( 156.058s) [        4CC78740]      vtkDelaunay3D.cxx:518   WARN| vtkDelaunay3D (0x559d2b180400): 1 degenerate triangles encountered, mesh quality suspect
2022-03-17 17:21:58.045 ( 158.072s) [        4CC78740]            vtkMath.cxx:522   WARN| Unable to factor linear system
2022-03-17 17:21:58.288 ( 158.314s) [        4CC78740]      vtkDelaunay3D.cxx:518   WARN| vtkDelaunay3D (0x559d0877c080): 3 degenerate triangles encountered, mesh quality suspect
Run Code Online (Sandbox Code Playgroud)

是否可以从 python 日志记录模块抑制或管理这些日志?

vtk pyvista

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

如何使用`with` 语句来抑制`sys.stdout` 或`sys.stderr`?

我正在尝试使用with声明来抑制sys.stdoutsys.stderr单独使用。 我发现了一个不起作用的教程。我正在使用Python 3.6.4并且我认为该教程是Python 2.

我在 SO 上查了一下,发现了一些但应用程序不起作用或不适用于这种情况。

这不适用:Python subprocess supress stdout and stderr

无法使任何with语句起作用: Suppress stdout / stderr print from Python functions

这适用于 fortran:在 Python 中重定向 FORTRAN(通过 F2PY 调用)输出

from contextlib import contextmanager
@contextmanager
def suppress_console(file=sys.stdout):
    with open(os.devnull, "w") as devnull:
        old_file = file
        file = devnull
        try:  
            yield
        finally:
            file = old_file

with suppress_console():
    print(1, file=sys.stdout)
# 1
Run Code Online (Sandbox Code Playgroud)

python stdout suppress stderr dev-null

0
推荐指数
1
解决办法
1172
查看次数