小编Bła*_*lik的帖子

__init__.py 中的本地范围与相对导入

我注意到asyncio/init.py从 python 3.6 开始使用以下构造:

from .base_events import *

...

__all__ = (base_events.__all__ + ...)
Run Code Online (Sandbox Code Playgroud)

base_events符号未在源代码中的任何位置导入,但模块仍包含它的局部变量。

我已经使用以下代码检查了这种行为,并将其放入一个旁边__init__.py的虚拟对象中test.py

test = "not a module"
print(test)

from .test import *
print(test)
Run Code Online (Sandbox Code Playgroud)

不是模块
<module 'testpy.test' from 'C:\Users\MrM\Desktop\testpy\test.py'>

这意味着test在使用星型导入后变量被隐藏了。

我稍微摆弄了一下,结果发现它不一定是一个星型 import,但它必须在一个 内__init__.py,而且它必须是相对的。否则模块对象不会被分配到任何地方。

如果没有赋值,从一个不是 的文件运行上面的例子__init__.py会引发一个NameError.

这种行为从何而来?这是否已在某处的导入系统规范中进行了概述?__init__.py必须以这种方式与众不同的原因是什么?它不在参考资料中,或者至少我找不到。

python python-importlib

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

如何在C++中的另一个类'private中定义一个类

是否可以在另一个类中定义一个私有类并将其用于数组?例如:

class a
{
    public:
    private:
    class b;
    b myarray[10];

    class b
    {
        public:
        b(int a):a_val (a){}
        private:
        int a_val;
    };
};
Run Code Online (Sandbox Code Playgroud)

忽略公共,我的语法有什么问题吗?

是否也可以在A中创建成员函数来修改b的私有值.例如,myarray [0] .a_val = 5; 如果是这样,这个语法也是正确的吗?

c++

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

为什么hint::spin_loop在aarch64上使用ISB?

其中有std::hint一个函数,其文档spin_loop中具有以下定义:

\n
\n

发出机器指令,向处理器发出信号,表明它正在忙等待自旋循环中运行 (\xe2\x80\x9cspin lock\xe2\x80\x9d)。

\n

在接收到自旋循环信号后,处理器可以通过例如节省功率或切换超线程来优化其行为。

\n
\n

根据目标架构,这会编译为

\n\n

最后一个让我有点头晕()。我认为这ISB是一个冗长的操作,这意味着,如果在自旋锁中使用,线程在尝试检测锁是否再次打开时会有点滞后,但除此之外几乎没有任何利润。

\n

ISB SY在 aarch64 上使用in 代替 a NOPin spin 循环有什么优点?

\n

assembly spinlock rust arm64 armv8

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

Python - 按 tottime 对个人资料报告进行排序

Python 包含一个简单易用的分析器

>> import cProfile
>> import re
>> cProfile.run('re.compile("foo|bar")')

      197 function calls (192 primitive calls) in 0.002 seconds

Ordered by: standard name

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
     1    0.000    0.000    0.001    0.001 <string>:1(<module>)
     1    0.000    0.000    0.001    0.001 re.py:212(compile)
    ...
Run Code Online (Sandbox Code Playgroud)

如何做完全相同的事情,但是按而tottime不是排序standardname

python profiler profiling

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

汇编:为什么有些x86操作码在x64中无效?

我的问题源于一个简单的好奇心:

为什么在x64中某些操作码是无效的(例如06,07),而在x86中用于相当基本的指令(06和07是推送和弹出)?我认为那些最简单的指令在两种架构中都能很好地完成.

为什么他们在x64中禁用了一些简单的指令?他们为什么不工作?为什么他们禁用某些操作码,在操作码列表中创建漏洞,何时可以将它们分配给x64版本的指令?

参考:

http://ref.x86asm.net/coder32.html

http://ref.x86asm.net/coder64.html

x86 assembly x86-64 opcode opcodes

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

处理linux上的用户输入

我正在努力在linux上创建一个简单的shell.我可以创建一些东西来学习如何使用基本系统调用.

场景:命令中的用户类型,按Tab键(因此shell自动完成其命令),弹出自动完成的命令(或建议),用户按Enter键,命令evals并执行.

就像在bash中一样.

我已经想出如何进行evals,将命令转换为标记,使用管道和东西执行它.我无法弄清楚的是输入部分.即那些标签击键.

我知道我有什么选择:

  • getc() - 分别获取每个字符,将其存储在缓冲区中.无法弄清楚如何获得Tab键击,因为它会暂停执行,直到它看到'\n'或Ctrl + D. 有点贵,因为命令中的每个字符都会有1个getc().另外,我将不得不处理缓冲区重新分配,摊销......嘘......
  • scanf("%s") - 太担心缓冲区溢出.我不能得到那些标签击键.暂停执行
  • read()(来自unistd.h) - 可能是我不想做的事情.但是我看到这里的人说使用它来做这件事真的很痛苦.我检查了.它是.
  • getline() - 无法获得Tab键击.

我查看了bash源代码,看看它是如何处理输入的,以及OH MY GOD.有450行代码专门用来做这个简单的事情(input.c文件).

真的没有比这更简单的解决方案吗?我不想使用ncurses,我不关心可移植性,我只是想实现一个目标:获取用户输入并知道他何时按Tab键.尽可能少地努力,优雅地做到这一点.

c linux input

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

核心转储到底在哪里?

TLDR:即使在设置ulimit并查看apport. 厌倦了努力工作以获得单个回溯。底部的问题。

我在这里做了一个小噩梦。我目前正在做一些 c 编码,在我的情况下总是意味着一公吨的段错误。大多数情况下,我几乎可以毫无问题地重现该错误,但今天我遇到了麻烦。

我的代码不一致地产生段错误。我需要它正在谈论的核心转储。

所以我正在寻找一个核心转储,为了我的小宝贝。那是我开始拔头发的时候

我的直觉告诉我,核心转储文件应该存储在工作目录中的某个地方——显然不是这样。看完这个,我高兴地键入:

ulimit -c 750000
Run Code Online (Sandbox Code Playgroud)

没事了。我的程序的输出告诉我它进行了核心转储 - 但我在 cwd 中找不到它。因此,在阅读本文后,我了解到我应该对apport和做一些事情core_pattern

core_pattern获得一个核心转储的改变似乎有点太多,我真的不想惹它,因为我知道我以后会忘记它。我倾向于把这些事情搞得一团糟。

Apport 具有这种神奇的特性,可以选择哪些核心转储有价值,哪些没有价值。它的日志告诉我...

ERROR: apport (pid 7306) Sun Jan  3 14:42:12 2016: executable does not belong to a package, ignoring
Run Code Online (Sandbox Code Playgroud)

...我的程序不够好。


  1. 这个核心转储文件在哪里?
  2. 有没有办法手动获得一次核心转储,而无需设置所有内容?我很少需要这些作为文件本身,大部分时间仅 GDB 就足够了。像let_me_look_at_the_core_dump <program name>这样的东西会很棒。

我已经有点秃顶了,所以任何帮助将不胜感激。

linux debugging coredump

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

Paramiko:将ssh会话嵌套到另一台计算机,同时保留paramiko功能(ProxyJump)

我试图paramiko通过netcat来弹回SSH会话:

 MyLocalMachine ----||----> MiddleMachine --(netcat)--> AnotherMachine
 ('localhost')  (firewall)   ('1.1.1.1')                 ('2.2.2.2')
Run Code Online (Sandbox Code Playgroud)
  • 没有从MyLocalMachine到的 直接连接AnotherMachine
  • 开启的SSH服务器MiddleMachine将不接受任何尝试打开与之连接的Direct-tcpip通道的尝试AnotherMachine
  • 我不能使用SSH密钥。我只能通过给定的用户名和密码进行连接。
  • 我不能用 sshpass
  • 我不能用 PExpect
  • 我想自动连接
  • 我想保留所有paramiko功能

我可以使用以下代码部分实现此目的:

cli = paramiko.SSHClient()
cli.set_missing_host_key_policy(paramiko.AutoAddPolicy())
proxy = paramiko.ProxyCommand('ssh user@1.1.1.1 nc 2.2.2.2 22')
cli.connect(hostname='2.2.2.2', username='user', password='pass', sock=proxy)
Run Code Online (Sandbox Code Playgroud)

问题是,因为ProxyCommand使用subprocess.Popen运行给定的命令,它要求我给密码“特设”,从用户输入(也,它需要在操作系统MyLocalMachinessh安装-这是情况并非总是如此)。

由于ProxyCommand的方法(recvsend)是对适当POpen方法的简单绑定,我想知道是否有可能欺骗paramiko客户端使用另一个客户端的会话作为代理?

python paramiko

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

如何为 Django models.IntegerChoices 添加标签

我的 django 模型之一中有两个 IntegerChoices 子类,它们定义 api 的票证优先级。我希望当优先级和状态在我的网页上呈现时显示标签,但是当使用 api 发送与标签相对应的整数时。到目前为止,这是我的代码:

class Ticket(models.Model):
    class Statuses(models.IntegerChoices):
        OPEN = 2, 'Open'
        PENDING = 3, 'Pending'
        RESOLVED = 4, 'Resolved'
        CLOSED = 5, 'Closed'
    class Priorities(models.IntegerChoices):
        LOW = 1, 'Low'
        MEDIUM = 2, 'Medium'
        HIGH = 3, 'High'
        URGENT = 4, 'Urgent'
    
    priority = models.IntegerField(default=Priorities.LOW, choices=Priorities.choices)
    status = models.IntegerField(default=Statuses.OPEN, choices=Statuses.choices)
Run Code Online (Sandbox Code Playgroud)

然后我尝试通过访问我的应用程序中的标签

<b>Priority: </b> {{ ticket.priority.label }} <br>
<b>Status:</b> {{ ticket.status.label }}
Run Code Online (Sandbox Code Playgroud)

但什么也没有出现。似乎新 IntegerChoices 类的 Django 文档非常少,并且不清楚标签函数如何工作。

我还尝试像这样渲染标签:

OPEN = 2, _('Open')
Run Code Online (Sandbox Code Playgroud)

但后来我收到一条错误消息“名称'_'未定义”

对于我需要做的事情有什么正确的指示吗?

更新

对于任何需要答案的人,我已经找到了。 …

python django django-templates django-models web-development-server

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

我想在每次单击退格键时删除一个字母

如何删除每个字母 退格键按钮上每个 keydown 处的段落元素的文本内容,如输入字段一次删除一个字母。

<!DOCTYPE html>
<html>
   <head>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width">
      <title>repl.it</title>
      <link href="style.css" rel="stylesheet" type="text/css" />
   </head>
   <body>
      <p></p>
      <script>
         let p = document.querySelector("p")
         document.addEventListener("keydown",function(e){
           if(e.key === "Backspace"){
          p.textContent-=e.key;
         }else{
         p.textContent+=e.key
          }
          })

      </script>
   </body>
</html>
Run Code Online (Sandbox Code Playgroud)

html javascript dom

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