小编ils*_*tam的帖子

django - 值更改后自动更新日期

在以下django模型中:

class MyModel(models.Model):
    published = models.BooleanField(default=False)
    pub_date = models.DateTimeField('date published')
Run Code Online (Sandbox Code Playgroud)

我希望每次发布的字段更改为True时,都会使用当前日期自动更新pub_date字段.

什么是聪明的方式?

谢谢.

python django datetime python-3.x

13
推荐指数
4
解决办法
1万
查看次数

正确使用列表推导 - python

通常,列表推导用于从现有列表中导出新列表.例如:

>>> a = [1, 2, 3, 4, 5]
>>> [i for i in a if i > 2]
[3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

我们应该用它们来执行其他程序吗?例如:

>>> a = [1, 2, 3, 4, 5]
>>> b = []
>>> [b.append(i) for i in a]
[None, None, None, None, None]
>>> print b
[1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

或者我应该避免上述内容而是使用以下内容?:

for i in a:
    b.append(i)
Run Code Online (Sandbox Code Playgroud)

python list-comprehension

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

使用PyQt4调整对话框的大小

我有这个代码示例:

import sys
from PyQt4.QtGui import (QApplication, QHBoxLayout, QVBoxLayout, QDialog,
                                          QFrame, QPushButton, QComboBox)

class Form(QDialog):
    def __init__(self, parent=None):
        super(Form, self).__init__(parent)

        moreButton = QPushButton('moreButton')
        moreButton.setCheckable(True)
        resizeButton = QPushButton('Resize')
        combo = QComboBox()
        combo.addItems(['item1', 'item2'])

        layout1 = QHBoxLayout()
        layout1.addWidget(moreButton)
        layout1.addWidget(resizeButton)

        layout2 = QHBoxLayout()
        layout2.addWidget(combo)
        self.frame = QFrame()
        self.frame.setLayout(layout2)
        self.frame.hide()

        layout3 = QVBoxLayout()
        layout3.addLayout(layout1)
        layout3.addWidget(self.frame)

        moreButton.toggled.connect(self.frame.setVisible)
        moreButton.clicked.connect(self.method)
        resizeButton.clicked.connect(self.method)

        self.setLayout(layout3)
        self.resize(630, 50)

    def method(self):
        if self.frame.isVisible():           
            self.resize(630, 150)
        else:
            self.resize(630, 250)

app = QApplication(sys.argv)
form = Form()
form.show()
app.exec_()
Run Code Online (Sandbox Code Playgroud)

我运行它,当moreButton点击时,ComboBox出现或消失.Dialog的大小也会发生变化.但是,如果我将方法更改为:

def method(self):
    if self.frame.isVisible():           
        self.resize(630, …
Run Code Online (Sandbox Code Playgroud)

python qt pyqt pyqt4

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

如何列出所有系统蒙版单元?

是否有一种简单的方法可以列出所有系统蒙版单元?

我能想到:

ls -l /etc/systemd/system/* | grep /dev/null
Run Code Online (Sandbox Code Playgroud)

或者(仅限单位名称):

ls -l /etc/systemd/system/* | grep /dev/null | cut -d' ' -f12 | awk -F'/' '{ print $(NF) }'
Run Code Online (Sandbox Code Playgroud)

有更清晰的方法吗?

linux systemd

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

如何在vim中映射"Ctrl +>"组合?

我想将CTRL>组合映射到gt(转到下一个vim选项卡).

因为>是一个特殊的角色,nmap <c->> gt不起作用.

我怎样才能达到预期的效果?

vim keyboard-shortcuts

6
推荐指数
2
解决办法
3944
查看次数

如何处理本地dotfile存储库?

和其他许多人一样,我想拥有一个包含我的配置文件的git存储库,并将其备份上传到托管站点.我的问题是如何处理本地回购的dotfiles.

假设我在dotfiles repo中有我的zshrc/bashrc.我可以将'source/path /到/ local/repo/zshrc'这一行放到我的〜/ .zshrc文件中,一切都很好.与vimrc相同.

但那些不支持这种命令的dotfiles呢?我是否应该在〜/ .conffile和/ pathtolocalrepo/conffile中具有相同的内容,当我对其中一个进行更改时更新另一个文件?或者有更聪明的方法吗?

常见的做法是什么?

这个本地存储库通常位于何处(在Linux上)?我不认为主文件夹是正确的位置(配置文件应该也可供其他用户使用),但哪个地方最适合它?

提前致谢.

linux git dotfiles

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

取消选中radiobutton - PyQt4

在这个代码示例中:

from PyQt4.QtGui import QDialog, QPushButton, QRadioButton, QHBoxLayout, QApplication, QButtonGroup
import sys

class Form(QDialog):
    def __init__(self, parent=None):
        super(Form, self).__init__(parent=None)

        button = QPushButton('Button')
        self.radiobutton1 = QRadioButton('1')
        self.radiobutton2 = QRadioButton('2')
        #self.group = QButtonGroup()
        #self.group.addButton(self.radiobutton1)
        #self.group.addButton(self.radiobutton2)       
        #self.group.setExclusive(False)

        layout = QHBoxLayout()
        layout.addWidget(button)
        layout.addWidget(self.radiobutton1)
        layout.addWidget(self.radiobutton2)
        self.setLayout(layout)

        button.clicked.connect(self.my_method)

    def my_method(self):
        self.radiobutton1.setChecked(False)
        self.radiobutton2.setChecked(False)

app = QApplication(sys.argv)
form = Form()
form.show()
app.exec_()
Run Code Online (Sandbox Code Playgroud)

单击按钮时,我希望取消选中所选的radioButton,但这种情况从未发生过.如果我取消注释注释行并运行代码,那么我可以取消选中radioButtons.但另一个问题出现了.因为该组不是独占的,所以我可以设置两个不能发生的radioButtons.

如果一次只能选择一个按钮,我该怎么办才能解开按钮?

python pyqt4 radio-button

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

zsh 和 bash 中 which 命令的不同行为

通过将 zsh 与 oh-my-zsh 框架一起使用一段时间,我注意到哪个命令在 zsh 中的行为与在 bash 中不同。

我的意思是:

# on zsh
ilias@ilias-pc ~  ? which ls
ls: aliased to ls --color=auto
ilias@ilias-pc ~  ? which which
which: shell built-in command
ilias@ilias-pc ~  ? bash
[ilias@ilias-pc ~]$ which ls
/usr/bin/ls
[ilias@ilias-pc ~]$ which which
/usr/bin/which
[ilias@ilias-pc ~]$ 
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况,我该如何“修复”它?

附注。我在 Arch Linux 上重现了这个(不确定它是否重要,但我提到了它)。

linux bash zsh

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

一对一读取子进程输出的多字节字符

我正在使用子进程运行一个进程:

\n\n
    p = subprocess.Popen(cmd, stdout=subprocess.PIPE)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想要做的是循环中一个一个地读取输出字符:

\n\n
while something:\n    char = p.stdout.read(1)\n
Run Code Online (Sandbox Code Playgroud)\n\n

在 python3 中subprocess.Popen().stdout.read()返回bytes()str()。我想将它用作 str 所以我必须这样做:

\n\n
    char = char.decode("utf-8")\n
Run Code Online (Sandbox Code Playgroud)\n\n

它可以很好地处理 ascii 字符。

\n\n

但对于非 ascii 字符(例如希腊字母),我得到一个 UnicodeDecodeError。这就是为什么希腊字符由多个字节组成的原因。问题是这样的:

\n\n
>>> b\'\\xce\\xb5\'.decode(\'utf-8\')\n\'\xce\xb5\'\n>>> b\'\\xce\'.decode(\'utf-8\') # b\'\\xce\' is what subprocess...read(1) returns - one byte\nTraceback (most recent call last):\n  File "<stdin>", line 1, in <module>\nUnicodeDecodeError: \'utf-8\' codec can\'t decode byte 0xce in position 0: unexpected end of data\n>>> \n
Run Code Online (Sandbox Code Playgroud)\n\n

我该如何处理这个问题?\n的输出subprocess.Popen().stdout.read()(作为字符串)的输出可能类似于“lorem …

python byte subprocess decode python-3.x

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

C11 独立内存屏障 LoadLoad StoreStore LoadStore StoreLoad

我想在原子和非原子操作之间使用独立的内存屏障(我认为无论如何它都不重要)。我想我了解存储屏障和加载屏障的含义以及 4 种可能的内存重新排序;LoadLoad, StoreStore, LoadStore, StoreLoad.

但是,我总是发现获取/释放概念令人困惑。因为在阅读文档时,acquire 不仅说到loads,还说到stores,而release 不仅说到stores,还说到loads。另一方面,普通负载障碍仅为您提供负载保证,而普通商店障碍仅为您提供商店保证。

我的问题如下。在 C11/C++11 中,将独立atomic_thread_fence(memory_order_acquire)视为负载屏障(防止LoadLoad重新排序)和atomic_thread_fence(memory_order_release)存储屏障(防止StoreStore重新排序)是否安全?

如果以上是正确的,我可以用什么来防止LoadStoreStoreLoad重新排序?

当然,我对可移植性感兴趣,我不在乎上述在特定平台上产生什么。

c c++ memory-model memory-barriers stdatomic

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

了解 64 位 Linux 上的 kmap

首先我要承认,即使在阅读了一些相关资源之后,我对 Linux 上的高内存和低内存的概念仍然没有完全清楚。然而,根据我对 64 位 Linux 的了解,无论如何都没有高内存(如果我错了,请纠正我)。

我试图了解 kmap 和地址空间如何在defconfig为arm64配置的Linux内核版本5.8.1上工作。

我添加了以下系统调用:

SYSCALL_DEFINE1(mycall, unsigned long __user, user_addr)
{
    struct page *pages[1];
    int *p1, *p2;

    p1 = (int *) user_addr;
    *p1 = 1; /* this works */
    pr_info("kernel: first: 0x%lx", (long unsigned) p1);

    if (get_user_pages(user_addr, 1, FOLL_WRITE, pages, NULL) != 1)
        return -1;

    p2 = kmap(pages[0]);
    *p2 = 2; /* this also works */
    pr_info("kernel: second: 0x%lx", (long unsigned) p2);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我从用户空间分配整个内存页面(在页面边界上),并将其作为该系统调用的参数传递给内核。通过从内核内部取消引用任一指针来修改该内存效果非常好。但是,这两个指针具有不同的值:

[    4.493480] kernel: first: 0x4ff3000
[ …
Run Code Online (Sandbox Code Playgroud)

memory-management linux-kernel virtual-address-space 32bit-64bit arm64

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

这是使用goto的可接受方式吗?

假设我想写一个游戏(用C语言),询问用户在游戏结束后是否想再次玩游戏.

我看到两种明显的方式来写这个.

第一:

int main(void)
{
    /* variable declarations and initializations */

    do { /* optionally multiple games */

        /* game code here */
        ........

        /* prompt user wheter he wants to play again */
        bool playagain = playagain();

    } while(playagain);

    .....
}
Run Code Online (Sandbox Code Playgroud)

第二个:

int main(void)
{
    /* variable declarations and initializations */

game_start: /* optionally multiple games */

    /* game code here */
    ........

    /* prompt user wheter he wants to play again */
    bool playagain = playagain();

    if …
Run Code Online (Sandbox Code Playgroud)

c goto

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