小编Six*_*Six的帖子

如何使用PyQt5的QWebEngineView"渲染"HTML

如何使用PyQt5 v5.6 QWebEngineView"渲染"HTML?

我之前使用PyQt5 v5.4.1 QWebPage执行了该任务,但建议尝试使用较新的QWebEngineView.

这是实现(它通常按预期工作,但有一些站点和情况无限期挂起):

def render(source_html):
    """Fully render HTML, JavaScript and all."""

    import sys
    from PyQt5.QtWidgets import QApplication
    from PyQt5.QtWebKitWidgets import QWebPage

    class Render(QWebPage):
        def __init__(self, html):
            self.html = None
            self.app = QApplication(sys.argv)
            QWebPage.__init__(self)
            self.loadFinished.connect(self._loadFinished)
            self.mainFrame().setHtml(html)
            self.app.exec_()

        def _loadFinished(self, result):
            self.html = self.mainFrame().toHtml()
            self.app.quit()

    return Render(source_html).html

import requests
sample_html = requests.get(dummy_url).text
print(render(sample_html))
Run Code Online (Sandbox Code Playgroud)

以下是我尝试使用QWebEngineView.首先,在Ubuntu上安装和设置PyQt5 v5.6:

# install PyQt5 v5.6 wheel from PyPI
pip3 install --user pyqt5

# link missing resources
ln -s ../resources/icudtl.dat ../resources/qtwebengine_resources.pak …
Run Code Online (Sandbox Code Playgroud)

python pyqt pyqt5

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

如何解析多行记录(用awk?)

我试图找出如何从多行记录中提取特定字段\n\n.

在这种情况下,它碰巧从apt-cache输出,类似于DEBIAN控制文件.见输出apt-cache show "$package"

Package: caffeine
Priority: optional
Section: misc
Installed-Size: 641
Maintainer: Reuben Thomas <rrt@sc3d.org>
Architecture: all
Version: 2.8.3
Depends: python3:any (>= 3.3.2-2~), python3, gir1.2-gtk-3.0, gir1.2-appindicator3-0.1, python3-xlib, python3-pkg-resources, libnet-dbus-perl
Filename: pool/main/c/caffeine/caffeine_2.8.3_all.deb
Size: 58774
MD5sum: 4438db3f6d1cf43a4f4b49cc7f24cda0
SHA1: e748370ac5ccd7de6fc9466ce0451d2e90d179d4
SHA256: ae303b4e32949cc1e1af80df7217e3406291679e3f18fa8f78a5bbb97504c4f6
Description-en: Prevent the desktop becoming idle in full-screen mode
 Caffeine stops the desktop becoming idle when an application
 is running full-screen. A desktop indicator ‘caffeine-indicator’
 supplies a manual toggle, and the command ‘caffeinate’ can be used
 to …
Run Code Online (Sandbox Code Playgroud)

regex linux bash awk sed

8
推荐指数
1
解决办法
4616
查看次数

是否有必要在bash中的变量赋值期间引用命令替换?

我读过的几乎无处不在,包括谷歌的bash脚本风格指南,提到引用命令替换的必要性(除非当然特别需要).

我理解在一般使用期间引用命令替换的时间/地点/原因.例如:echo "$(cat <<< "* useless string *")"而不是echo $(...)

但是对于具体的变量赋值,我看到了很多这样的例子: variable="$(command)"

然而,我发现没有variable=$(command)不等同的实例.

variable="$(echo "*")"并将variable=$(echo "*")值设置为'*'.

任何人都可以给出任何在变量分配期间不加引号的替换实际会导致问题的情况吗?

bash shell sh

6
推荐指数
1
解决办法
175
查看次数

在 shell 中按名称对目录内容(包括隐藏文件)进行排序

有没有一种好方法可以在 shell 中对目录内容(包括隐藏文件)进行排序?基本上我希望能够ls在我的 GUI 文件管理器中完成目录。在典型的目录中,输出如下:

.a_hidden_​​dir

.b_hidden_​​dir

.c_hidden_​​dir

目录

b_目录

c_目录

.a_隐藏文件

.b_隐藏文件

.c_隐藏文件

一份文件

b_文件

c_文件

当然ls有这个--group-directories-first选项,但这只能让我们完成部分工作,因为sort忽略了前导.,它不会将隐藏文件排序到顶部。

我希望能够以这种方式对ls、或其他路径列表的输出进行排序。find有谁知道一个好方法来做到这一点 - 也许是sort -k KEYDEF

现在我正在做这样的事情(它假设目录名称附加了斜杠):

pathsort(){
    input=$(cat)
    (
        awk '/^\..+\/$/' <<<"$input" | sort
        awk '/^[^.].+\/$/' <<<"$input" | sort
        awk '/^\..+[^/]$/' <<<"$input" | sort
        awk '/^[^.].+[^/]$/' <<<"$input" | sort
    ) | sed 's/\/$//'
}

\ls -Ap | pathsort
Run Code Online (Sandbox Code Playgroud)

上面的代码完成了工作,但还远远不够理想。请告诉我有更好的方法...

linux sorting bash shell awk

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

Python argparse --toggle --no-toggle flag

是否有一种简单的方法来使用--toggle--no-toggle使用Python的argparse标记?

现在我正在使用类似于以下内容的东西:

import argparse

parser = argparse.ArgumentParser()

parser.add_argument('--toggle',
                    action='store_true',
                    dest='toggle')
parser.add_argument('--no-toggle',
                    action='store_true',
                    default=True,
                    dest='notoggle')

options = parser.parse_args([])
Run Code Online (Sandbox Code Playgroud)

我只是手动解析long if链中的可能性,但如果有一种方法可以整理它并且状态由解析器立即存储在一个目标中,那将会很好,例如options.toggle.这是可行的,如果可行,怎么样?

一个有点相关的答案是Python argparse切换标志但是我有兴趣使用--no-longopts store_false切换前缀(类似于-前面提到的链接中概述的shortopts切换前缀).

python argparse

3
推荐指数
2
解决办法
1640
查看次数

Python 模块的正确日志记录实现

有谁知道任何具有良好日志记录实现的模块的好例子?

\n\n

我一直在用几种不同的方式进行日志记录,但我不确定哪种方式最Pythonic。

\n\n

对于脚本,这就是我一直在做的事情:

\n\n
import logging\n\nLOGGER = logging.getLogger(__program__)\nSTREAM = logging.StreamHandler()\nFORMATTER = logging.Formatter('(%(name)s) %(levelname)s: %(message)s')\nSTREAM.setFormatter(FORMATTER)\nLOGGER.addHandler(STREAM)\n\ndef main():\n    LOGGER.warning('This is a warning message.')\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是在全局命名空间中执行的,我可以调用LOGGER从任何地方调用。

\n\n

对于模块来说,上述解决方案并不是一个好主意,因为代码是在导入时执行的。所以对于模块,我一直称之为_logging()函数来设置日志记录。

\n\n
def _logging():\n    import logging\n\n    global logger\n    logger = logging.getLogger(__program__)\n    stream = logging.StreamHandler()\n    formatter = logging.Formatter('(%(name)s) %(levelname)s: %(message)s')\n    stream.setFormatter(formatter)\n    logger.addHandler(stream)\n\ndef main():\n    _logging()\n    logger.warning('This is a warning message.')\n
Run Code Online (Sandbox Code Playgroud)\n\n

由于logger是全局的,我可以在任何需要的地方调用它。然而,pylint会发出全局变量未定义的警告。它被定义为全局变量记录器 在模块级别未定义 当通过 \xe2\x80\x9cglobal\xe2\x80\x9d 语句定义变量但该变量未在模块范围中定义时使用但我不太确定时使用为什么这是一个问题。

\n\n

或者我应该打电话给_logger()尽早调用该函数(减去全局函数),然后在需要的地方创建记录器?

\n\n
def _logging():\n    import logging\n\n …
Run Code Online (Sandbox Code Playgroud)

python logging

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

标签 统计

bash ×3

python ×3

awk ×2

linux ×2

shell ×2

argparse ×1

logging ×1

pyqt ×1

pyqt5 ×1

regex ×1

sed ×1

sh ×1

sorting ×1