我使用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().
我不知道如何编写这个便利助手
我试图弄清楚如何使用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).
谢谢!
我希望能够在拟合预测模型的同时抑制来自 fbprophet 的一些输出。此输出(“初始对数联合概率...”、“优化正常终止:”、“检测到收敛:...”等)显然来自 Stan 的 cpp 代码,我找不到任何明显的方法来控制它[我正在使用 python 接口]。深入研究代码发现,verbose=False 作为高级 stan() 例程(在 pystan/api.py 中)中的默认值,但显然此参数不会抑制此打印输出。不修改代码是否可行?
我有一个库需要在我的代码中导入。但是,每当导入它时,它都会向控制台输出几行数据。如何抑制输出?
谢谢
我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 年 …
我有以下脚本,我使用 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中有以下代码:
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) 目前,我们使用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 日志记录模块抑制或管理这些日志?
我正在尝试使用with声明来抑制sys.stdout或sys.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)