小编c z*_*c z的帖子

通过向 stdin 发送 ctrl-c 来向进程发送 SIGINT

我正在寻找一种模仿终端进行一些自动化测试的方法:即启动一个进程,然后通过将数据发送到标准输入并从标准输出读取来与其交互。例如,将一些输入行发送到标准输入,包括ctrl-c和 ,ctrl-\这将导致向进程发送信号。

使用std::process::Commannd我能够将输入发送到eg cat,并且我还在stdout上看到它的输出,但是发送ctrl-c(据我所知3)不会导致SIGINT发送到shell。例如这个程序应该终止:

use std::process::{Command, Stdio};
use std::io::Write;

fn main() {
    let mut child = Command::new("sh")
        .arg("-c").arg("-i").arg("cat")
        .stdin(Stdio::piped())
        .spawn().unwrap();
    let mut stdin = child.stdin.take().unwrap();
    stdin.write(&[3]).expect("cannot send ctrl-c");
    child.wait();
}
Run Code Online (Sandbox Code Playgroud)

我怀疑问题是发送ctrl-c需要一些 tty 并且通过sh -i它仅处于“交互模式”。

我是否需要成熟并使用例如termionncurses

更新:我在原来的问题中混淆了 shell 和终端。我现在把这事弄清楚了。我还提到了ssh应该是的sh

unix signals process pty rust

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

Python。从多个异常中引发异常

我可以引发from另一个异常以提供附加信息,例如:

try:
    age = int(x)
except Exception as ex:
    raise ValueError("{} is not a valid age.".format(x)) from ex
Run Code Online (Sandbox Code Playgroud)

有没有办法从多个异常中获取来源?例如

try:
    age = int(x)
except Exception as ex1:
    try:
        age = date_now().year - parse_date(x).year
    except Exception as ex2:
        raise ValueError("{} is not a valid age or date.".format(x)) from ex1 + ex2
Run Code Online (Sandbox Code Playgroud)

python error-handling exception raise python-3.x

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

为什么Python的内联类方法的行为与元类定义的方法不同

可以直接在类型上调用A classmethod,无论是内联定义还是in的一部分metaclass

class eggs( type ):
    def f1( cls ):
        print( "eggs" )


class spam( metaclass = eggs ):
    @classmethod
    def f2( cls ):
        print( "spam" )


f = spam()
type(f).f2() #--> spam
type(f).f1() #--> eggs
Run Code Online (Sandbox Code Playgroud)

但是,似乎classmethod无法在实例上调用元类中的定义:

f.f2() #--> spam
f.f1() #--> AttributeError
Run Code Online (Sandbox Code Playgroud)

为什么是这样?

python metaclass class-method python-3.x

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

为什么 mypy 在无法注释时抱怨列表理解?

当不可能使用 MyPy 注释这样的变量时,为什么 Mypy 抱怨它需要对列表理解变量进行类型注释?

具体来说,我该如何解决以下错误:

from enum import EnumMeta

def spam( y: EnumMeta ):
    return [[x.value] for x in y]  Mypy: Need type annotation for 'x' 
Run Code Online (Sandbox Code Playgroud)

cast不起作用

return [[cast(Enum, x).value] for x in y]  Mypy: Need type annotation for 'x'  
Run Code Online (Sandbox Code Playgroud)

即使Mypy不支持注释(x:Enum)在这种情况下,我看到了使用的变量可以使用注释的cast看到这个帖子)。但是,这cast(Enum, x) 并不能阻止 Mypy 抱怨变量没有首先被注释。

#type:不起作用

return [[x.value] for x in y] # type: Enum  Mypy: Misplaced type annotation
Run Code Online (Sandbox Code Playgroud)

我还看到for可以使用注释对循环变量进行注释,# type:参见这篇文章 …

python mypy python-typing

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

C++ const_iterator to iterator for forward_list

根据这个问题,并假设我对容器本身有一个可变引用,则可以使用以下方法安全地删除迭代器的常量性:

foo::const_iterator cit = ... ;
foo::iterator it = c.erase( cit, cit );
Run Code Online (Sandbox Code Playgroud)

但是,根据此代码,这似乎不适用于forward_list的等效项erase_after::

#include <iostream>
#include <forward_list>

typedef std::forward_list<int>::const_iterator CIT;
typedef std::forward_list<int>::iterator IT;

int main()
{
    std::forward_list<int> m{1, 2, 3};

    CIT cit = m.begin();
    IT it = m.erase_after(cit, cit); // Segmentation fault!

    std::cout << *it;
}
Run Code Online (Sandbox Code Playgroud)

那么有没有办法删除这个类的const迭代器的constness?最好不是通过迭代!

c++

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

在*现代* C++中,我应该如何管理*无主*指针?

现代C++ 中,我应该如何管理无主指针?我在想像weak_ptrfor 之类的东西unique_ptr,但这似乎不存在。

例子

例如,如果我有一个A拥有指针的类,我应该使用unique_ptr<X>而不是旧X*指针,例如

class A
{
    std::unique_ptr<X> _myX;
};
Run Code Online (Sandbox Code Playgroud)

但是如果我有另一个B使用这个指针的类,我在这里做什么?使用 C 风格的指针,我会这样做:

class B
{
    X* _someX;
};
Run Code Online (Sandbox Code Playgroud)

这似乎是正确的,但从代码中看不出我引用了另一个对象的指针(例如,读者可能认为我可能没有使用智能指针)。

我考虑了以下几点

  • std::shared_ptr<X>- 似乎是浪费引用计数,因为A它保证比B.
  • std::weak_ptr<X> - 仅适用于 shared_ptr
  • X& - 仅当 X& 在 B 的构造函数中可用时才有效

这似乎是一个明显的问题,如果之前有人问过,很抱歉。我环顾四周,看到了这个问题,但不幸的是,在一个特定情况下,OP 询问“是否可以使用 X*”。我正在寻找我通常应该做的事情而不是X*,(如果有的话!)。

c++ smart-pointers

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

wchar_t对Windows API有用了吗?

当我#include <windows.h>在C或C++中时,我被迫决定字符的格式,其中TCHAR等于charwchar_t.

我环顾四周相当多的并尽可能的职位如这一个或类似网站点破wchar_t事儿来了约一个很久以前UTF8之前,对各种原因,并不是一个特别好的解决方案的Unicode现代编程.然而,这些并没有说明已经运行的现有系统的支持wchar_t.

所以我的问题是,我应该使用哪一个?如果我使用普通的char遗嘱将来会被MS抛弃,因为在一天结束时,wchar_tAPI 的版本是最近的?或者,如果我使用wchar_t,将我的代码运行在其他现代平台上是否会很痛苦,这些平台后来使用charUTF8中的普通版本开发?

c c++ windows unicode winapi

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

关于实例的Python __doc__文档

我想在某些动态创建的对象上提供文档(在我的程序中),但仍然可以使用他们的类文档.设置__doc__似乎是一种合适的方法.但是,我在这方面的Python帮助中找不到很多细节,在实例上提供文档是否有任何技术问题?例如:

class MyClass:
    """
    A description of the class goes here.
    """

a = MyClass()
a.__doc__ = "A description of the object"

print( MyClass.__doc__ )
print( a.__doc__ )
Run Code Online (Sandbox Code Playgroud)

python python-3.x

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

单线程运行 Flask

我目前使用系统范围的互斥锁来处理我的 Flask 应用程序中的多处理

由于 GIL,以及最终多处理已经为我提供并发性这一事实,我不想也不必担心我的应用程序中的多线程

我可以让 Flask 开发服务器运行单线程吗?

顺便说一句,如果我使用 Gunicorn 进行部署,是否可以这样做(即运行多个进程,所有进程都是单线程的)?

python flask

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

函数中定义的Python类的状态

def myfn():
    class MyClass:
        pass


    return MyClass()


a = myfn()
b = myfn()

print(type(a) is type(b))
Run Code Online (Sandbox Code Playgroud)

在这里我们可以看到type(a) 不是 type(b).这总是保证是这样的吗?为什么解释器不优化这个,因为定义MyClass不依赖于传递给的任何参数myfn

python class python-3.x

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

为什么 C++20 中的模板概念允许 CClass&amp;(CUnrelatedClass&amp;)?

我创建了一个 C++ 概念,用于检查模板类 是否T可以从固定类 构造CData&

T = CThing对于无法从 构造的特定对象CData&,我的概念似乎传递了对该类的引用,即T = CThing&,这不是我想要的,因为它会导致我的模板解析不正确。

不仅如此,我不知道为什么这段代码甚至可以编译,因为它成功地CThing&从引用初始化了引用CData&,这是一个完全不相关的类。

我在下面添加了一个 MWE 来展示我的意思。

据我所知:

  • return T(data);T当isCThing&且 data 为 时应该是不可能的CData&,但这是有效的。
  • 概念IsConstructable应该失败CThing&,但它通过了。
  • std::cout << thing.Value甚至不应该到达,但它被调用(并产生垃圾输出)。

有人可以解释一下发生了什么事吗?

#include <iostream>

struct CThing { int Value; };
struct CData { };

template <typename T> concept IsConstructable = requires(CData& data, T t) { T(data); };

template<typename T> struct …
Run Code Online (Sandbox Code Playgroud)

c++

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