小编vmo*_*eco的帖子

通过NFS上载文件时出现OSerror

当我尝试通过django管理界面上传媒体文件时,我收到此错误:

OSError: [Errno 45] Operation not supported
Run Code Online (Sandbox Code Playgroud)

这是追溯的最后一行:

  File "/path/to/home/Envs/myenv/lib/python3.5/site-packages/django/core/files/locks.py", line 112, in unlock
    ret = fcntl.lockf(_fd(f), fcntl.LOCK_UN)
Run Code Online (Sandbox Code Playgroud)

我找到了这个答案,其中一条评论让我看到了这张票,然后是这个提交,在票证中作为"解决方法"引入(见下文).

以下是django/core/files/locks.py根据解决方法我应该做的更改.

  elif system_type == 'posix':
     def lock(file, flags):
-        fcntl.flock(fd(file), flags)
+        fcntl.lockf(fd(file), flags)

     def unlock(file):
-        fcntl.flock(fd(file), fcntl.LOCK_UN)
+        fcntl.lockf(fd(file), fcntl.LOCK_UN)
Run Code Online (Sandbox Code Playgroud)

我试图手动反转此提交的更改(用flock()调用替换lockf()调用),但我仍然得到相同的错误.还有补丁,但这些补丁看起来很旧(约7岁,我使用django 1.9和python 3.5).

我该怎么解决这个问题?

编辑:

正如plombix所提到的,我的主目录安装在NFS上.

编辑2:

我也尝试用fcntl.fcntl()调用替换flock调用,我得到了一个不同的错误:

OSError: [Errno 14] Bad address
Run Code Online (Sandbox Code Playgroud)

django macos nfs python-3.x

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

在OSX上编译clisp-2.49:找不到LIBFFI

TL; DR:

即使libffi看起来安装了,configure即使我给它(正确的?)前缀,脚本也找不到它.

/!\这篇文章的最后一部分(*)是我被困的地方./!\

我只提出其他信息来解释我是如何到达那里的.我为这篇重要的帖子道歉,如果事情似乎与你无关,请随时告诉我,我会考虑让我的帖子更短.

为什么我要自己编译CLISP:

我有一个lisp程序,我想运行,但在CLISP安装时运行它brew(我没有root访问权限),我收到以下错误:

*** - CFFI requires CLISP compiled with dynamic FFI support.
Run Code Online (Sandbox Code Playgroud)

所以我想自己编译CLISP.

到目前为止我正在使用SBCL,但我遇到了问题,正在寻找其他实现.

我在尝试编译时遇到的问题:

我下载了消息来源,解开它.

然后我试着跑./configure.

但我明白了:

Configure findings:
  FFI:        no (user requested: default)
  readline:   no (user requested: default)
  libsigsegv: no, consider installing GNU libsigsegv
./configure: libsigsegv was not detected, thus some features, such as
  generational garbage collection and
  stack overflow detection in interpreted Lisp code
cannot be provided. …
Run Code Online (Sandbox Code Playgroud)

macos homebrew clisp common-lisp failed-installation

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

用printf显示宽字符

我试图理解printf如何使用宽字符(wchar_t).

我做了以下代码示例:

样本1:

#include <stdio.h>
#include <stdlib.h>

int     main(void)
{
    wchar_t     *s;

    s = (wchar_t *)malloc(sizeof(wchar_t) * 2);
    s[0] = 42;
    s[1] = 0;
    printf("%ls\n", s);
    free(s);
    return (0);
}
Run Code Online (Sandbox Code Playgroud)

输出:

*
Run Code Online (Sandbox Code Playgroud)

这里一切都很好:我的字符(*)被正确显示.

样本2:

我想展示另一种角色.在我的系统上,wchar_t似乎编码为4个字节.所以我试着显示以下字符: É

#include <stdio.h>
#include <stdlib.h>

int     main(void)
{
    wchar_t     *s;

    s = (wchar_t *)malloc(sizeof(wchar_t) * 2);
    s[0] = 0xC389;
    s[1] = 0;
    printf("%ls\n", s);
    free(s);
    return (0);
}
Run Code Online (Sandbox Code Playgroud)

但这次没有输出,我尝试使用"编码"部分(参见上一个链接)中的许多值s[0](0xC389,201,0xC9)...但我从未得到过É显示的字符.我也试过%S而不是%ls.

如果我尝试像这样调用printf:printf("<%ls>\n", …

c encoding printf widechar

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

换档键关闭时没有鼠标滚轮事件(shift +鼠标滚轮事件?)

我正在尝试使用lispbuilder-sdl管理lisp中的一些事件.

到目前为止我得到了这个.

;; Load package :
(ql:quickload "lispbuilder-sdl")

;; main definition:
(defun main (argv)
  (defparameter *ticks* 0)
  (sdl:with-init ()
    (sdl:window 100 100 :title-caption "test")
    (sdl:with-events ()
      (setf (sdl:frame-rate) 60)
      (:quit-event () (progn (sdl:quit-image) (exit) t))
      (:mouse-button-down-event 
       (:button button :x x :y y)
       (format t "~&LSHIFT: ~a RSHIFT: ~a BUTTON: ~a X: ~d Y: ~d" 
               (sdl:get-key-state :sdl-key-lshift) 
               (sdl:get-key-state :sdl-key-rshift) 
               button x y))
      (:key-down-event 
       (:key key)
       (format t "~& KEY: ~a" key))
      (:idle ()))))



;; Entrypoint :
(sb-int:with-float-traps-masked (:invalid :inexact …
Run Code Online (Sandbox Code Playgroud)

lisp events sdl sbcl common-lisp

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

在 FK 上使用“limit_choices_to”会导致 ModelForm 提交时出现“MultipleObjectsReturned”错误

长话短说:

根据相关对象的值过滤查询集可能会导致结果中出现重复值。

limit_choices_to当以类似的方式使用模型字段时,此行为会在模型字段中的 FK 属性上传播,MultipleObjectsReturned从而在使用与此模型关联的模型表单并选择重复值时导致错误。

是否可以distinct()在模型的外键上应用或等效,limit_choices_to以避免模型表单字段的选项重复?


重现问题:

python manage.py shell(并解决它):

设两个模型AB

class A(models.Model):
    pass

class B(models.Model):
    a = models.ForeignKey(A)
    d = models.BooleanField(default=False)
Run Code Online (Sandbox Code Playgroud)

以及以下条目:

>>> a = A.objects.create()
>>> b1 = B.objects.create(a=a, d=True)
>>> b2 = B.objects.create(a=a, d=True)
Run Code Online (Sandbox Code Playgroud)

使用 aget()的以下查询集会导致错误:

>>> A.objects.filter(b__d=True).get(id=1)
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/home/vmonteco/.venvs/django/lib/python3.6/site-packages/django/db/models/query.py", line 384, in get
    (self.model._meta.object_name, num)
app.models.MultipleObjectsReturned: get() returned more than …
Run Code Online (Sandbox Code Playgroud)

django duplicates django-queryset

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

strlcat(): dst 总是 NUL_terminated 吗?什么是“大小”和返回值?

我必须从标准 C 库中实现我自己版本的 strlcat() 函数。

size_t     strlcat(char * restrict dst, const char * restrict src, size_t size);
Run Code Online (Sandbox Code Playgroud)

我有两个关于它如何工作的问题:

它是否dst在每种情况下都以NUL_terminates 结尾?

在我的男人中,我有以下几点:

strlcat() 获取缓冲区的完整大小(不仅仅是长度)并保证以 NUL 终止结果(只要大小大于 0,或者在 strlcat() 的情况下,只要至少是dst 中有 1 个字节可用)。

和 :

strlcat() 函数将 NUL 终止的字符串 src 附加到 dst 的末尾。它将最多附加 size - strlen(dst) - 1 个字节,NUL 终止结果。

但是也 :

但是请注意,如果 strlcat() 在没有找到 NUL 的情况下遍历 size 个字符,则字符串的长度被认为是 size 并且目标字符串不会以 NUL 结尾(因为 NUL 没有空间)。

那么,我应该在每种情况下 NUL_terminate dst 吗?一方面,它表示存在dst字符串不是 NUL_terminated 的情况。另一方面,该男子说strlcat()保证dst将是 NUL_terminated,并且非 NUL_terminated 字符串不会非常不安全吗? …

c

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

每个窗口的起始目录不同?

我每天在笔记本电脑上使用tmux(2.5) 来工作,并且我的 tmux 会话有一个起始目录,这是我启动 tmux 会话的工作目录。我打开的每个窗格/窗口都以此起始目录作为工作目录开始。

我可以更改此起始目录,并且此更改将应用​​于整个会话。

但是,如果我想使用多个窗格处理不同的项目,我可以启动一个新窗口,但我在其中打开的每个窗格都将从会话的起始目录开始:我必须为cd每个窗格指定新位置,该位置不是不实用。

如果我需要同时处理多个项目/目录,我可以启动一个新的终端会话,然后cd到相关的目录/项目并启动一个新的 tmux 会话。这并不复杂。

但如果我想通过在服务器上做同样的事情ssh,我需要:

  • 打开一个新的 ssh 会话。
  • 将我的远程 tmux 会话嵌入到其他 tmux 会话中。

这对我来说听起来都不实用,我更喜欢在远程计算机上使用单个 tmux 会话。

我认为能够使用自己的起始目录位置启动新窗口会更方便,该位置将应用于其中打开的任何新窗格。有办法实现这一点吗?

编辑 :

我已经尝试过命令-c的参数tmux new-window

但它不会将其起始目录分配给以这种方式创建的窗口,它仅将此自定义起始目录应用于创建的第一个窗格。

在此窗口中打开的任何新窗格都会使用会话的起始目录作为默认工作目录(而不是传递给 的路径tmux new-window)。

tmux

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

如何避免在 zsh for 循环中使用空格作为分隔符?

我正在尝试制作一个小脚本来转换音乐库中的一些文件。

但如果我做类似的事情:

#!/usr/bin/zsh                                                                     

for x in $(find -name "*.m4a");
do
    echo $x;
done
Run Code Online (Sandbox Code Playgroud)

在包含以下内容的文件夹中进行解释时:

foo\ bar.m4a
Run Code Online (Sandbox Code Playgroud)

它会返回:

foo
bar.m4a
Run Code Online (Sandbox Code Playgroud)

如何防止 for 循环将空格字符解释为分隔符?

我可以替换$(find -name "*.m4a")$(find -name "*.m4a" | sed "s/ /_/g")然后sed在循环中使用另一种方式,但是如果文件名/路径已经包含下划线(或者我可以使用其他字符代替下划线)怎么办?

任何的想法?

for-loop zsh sh separator

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

用自制软件安装C ++库

我正在尝试为我的项目安装C ++库(gtkmm),并使用简单的测试文件(有关gtkmm的维基百科页面上的主要内容)来测试此安装。我做到了brew install gtkmm3,它安装了它,但是当我编译clang++ -Wall -Werror -Wextra -o test test.cpp它时却找不到我的头文件:

test.cpp:15:10: fatal error: 'gtkmm-3.0/gtkmm.h' file not found
#include <gtkmm-3.0/gtkmm.h>
Run Code Online (Sandbox Code Playgroud)

标头位于~/homebrew/include/gtkmm-3.0/gtkmm.h。我试过了 :

  • 加入$HOME"/homebrew/include"$PATH使用#include <gtkmm-3.0/gtkmm.h>我的源文件。

  • 添加$HOME"/homebrew/include/gtkmm-3.0"到我的文件$PATH#include <gtkmm.h>在我的源文件中使用。

但是我仍然无法编译。

我该怎么办?

c++ macos homebrew

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

无法创建实例时调用的析构函数?

在尝试理解一些Python概念时,我遇到了以下问题:

class A:
    def __init__(self, x):
        self.x = x

    def __del__(self):
        print("del")

a1 = A()
Run Code Online (Sandbox Code Playgroud)

产出:

$ python test.py
del
Traceback (most recent call last):
  File "testdest.py", line 9, in <module>
    a1 = A()
TypeError: __init__() takes exactly 2 arguments (1 given)
Run Code Online (Sandbox Code Playgroud)

错误是显而易见的(实例化时缺少参数),但我想知道为什么在拥有实例之前调用析构函数?

除非在尝试实例化时,Python甚至在调用构造函数之前创建了一种实例,并且需要在最后进行清理?

既然self传递给构造函数,我可以假设这self是实例吗?这是真的,那么在调用构造函数时实例已经存在,是吗?

这是垃圾收集器的行为,可能取决于当前的实现吗?

garbage-collection destructor instantiation python-3.x

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