小编Laj*_*agy的帖子

Popen.communicate()抛出OSError:"[Errno 10]没有子进程"

我正在尝试使用子进程模块启动子进程并使用Python从Linux获取其输出:

#!/usr/bin/python2.4
import subprocess

p = subprocess.Popen(['ls', '-l', '/etc'],
                   stdout=subprocess.PIPE,
                   stderr=subprocess.PIPE)
out, err = p.communicate()
Run Code Online (Sandbox Code Playgroud)

但是,我经历了一些诡异:有时,p.communicate()会抛出

OSError: [Errno 10] No child processes
Run Code Online (Sandbox Code Playgroud)

什么可以导致这个例外?这里是否有任何非决定论或竞争条件会导致邋??

python linux

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

关于隐藏成员变量的警告?

以下代码片段有一个内存泄漏,我花了太多时间追逐.问题是在Foo()内部,局部变量x_隐藏了成员变量x_.它也很烦人,因为编译器可能已经警告过我.海湾合作委员会是否有这样的警告标志?(对于好奇:我已经通过首先使用局部变量,然后将其更改为成员变量,但忘记删除类型声明来到达错误代码.)

struct A {
  A() x_(NULL) {}

  ~A() {
    delete x_;
  }

  void Foo() {
    HugeThingy* x_ = new HugeThingy();
    x_->Bar("I. Need. Garbage. Collection. Now.");
  }

  HugeThingy* x_;

  DISALLOW_COPY_AND_ASSIGN(A);  // Macro to prevent copy/assign.
}
Run Code Online (Sandbox Code Playgroud)

c++ gcc

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

Java中的Constructor Exception中的`return value'?

看看下面的代码片段:

A a = null
try {
  a = new A();
} finally {
  a.foo();  // What happens at this point?
}
Run Code Online (Sandbox Code Playgroud)

假设A的构造函数抛出运行时异常.在标记的行,我总是保证得到一个NullPointerException,或者foo()将在一半构造的实例上被调用?

java exception instantiation

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

Haskell 构造类似于 Rust 特征对象

Haskell 支持类型类,例如相等:

class Eq a where 
  (==)                  :: a -> a -> Bool
Run Code Online (Sandbox Code Playgroud)

Rust 对类型特征做了同样的事情:

pub trait Draw {
    fn draw(&self);
}
Run Code Online (Sandbox Code Playgroud)

现在,可以在 Haskell 中声明一个列表,其元素必须属于相等类型类:(Eq a => [a]我相信在 Haskell 中a称为约束类型)。但是,列表的元素仍然必须是同一类型!说,全部Integer或全部Float或某事。然而,在 Rust 中,人们可以拥有一个值列表(向量),其中每个值都实现给定的特征,但它们不一定是相同的具体类型:Vec<Box<dyn Draw>>。有没有办法在 Haskell 中做同样的事情?就像,我想要一个值列表,但我关心的是每个值都属于某个类型类,但不一定是相同的具体类型。

haskell

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

KineticJS在动画形状内单击检测

好吧,我承认我试图变得聪明:我想如果我覆盖了Shape的drawFunc属性,我可以简单地在矩形内绘制任何内容并仍然使用KineticJS的点击检测.这是我的尝试:

var shape = new Kinetic.Shape({
  drawFunc: function(context) {
    var id = 26;  // Id of a region inside composite image.
    context.beginPath();
    context.rect(0, 0, w, h);
    context.closePath();
    this.fill(context);
    this.stroke(context);
    context.drawImage(copyCanvas, (id % 8) * w, flr(id / 8) * h, 
        w, h, 0, 0, w / 2, h / 2);
  },
  draggable: true
});
Run Code Online (Sandbox Code Playgroud)

因此,想法是绘制一个矩形,并使用drawImage()在矩形顶部绘制一些东西(就像一个纹理,除了它随时更改因为copyCanvas本身更改).与此同时,我预计事件处理(特别是拖放)仍然"正常工作".好吧,接下来会发生什么:我的drawImage()未覆盖的矩形部分正确检测到了点击次数.但是,图像覆盖的矩形的四分之一拒绝响应点击!现在,我的问题是为什么?我挖掘了KineticJS代码,并且向我看来,点击检测只是意味着绘制到缓冲区并查看给定的x,y点是否具有非零alpha.我无法看到我在矩形上方绘制图像会如何影响这一点.

有什么想法发生了什么?

javascript kineticjs

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

覆盖Emacs库中的单个函数

我使用Emacs模式来注释一些文件(实际模式并不重要)。它作为一个库提供,并附带编译的Lisp代码(当然)。我想通过覆盖其中的单个功能来修改其行为。仅用于我的本地Emacs会话。现在,我只是从库的源文件中复制粘贴该函数,对其进行一些修改,然后单击eval-last-sexp。到目前为止,一切都很好。但是,我得到的结果不一致:我不确定Emacs如何处理来自.elc文件的功能与来自源功能的混合功能。有时,我看到自己的函数版本正在运行,有时是原始版本。非常令人困惑(烦人)。

有什么想法可以不断替换Emacs库中的lisp函数而不修改库的只读源文件吗?

emacs function advising-functions

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

具有“消息屏障”功能的消息队列?

是否有消息队列实现允许通过在消息流中插入“消息屏障”将工作分解为“批处理”?让我澄清一下。没有消息后,消息屏障应传递到队列中的任何消费者,直到所有的消息之前的屏障被消耗。有点像同步点。我还希望所有消费者到达障碍时收到通知。

那里有这样的东西吗?

java jms

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

通过回调正确清理父母和孩子(C++)

这个设计问题一次又一次地出现,我仍然没有一个很好的解决方案.它可能会变成一种设计模式;)但是,它似乎非常特定于C++(缺少垃圾收集).无论如何,这是问题所在:

我们有一个父对象,它保持对子对象的引用.父母的州取决于其子女的州(某些总和).为了通知其子女的状态变化,它会向他们传递对自己的引用.(在另一个变体中,它向它们传递一个回调,子进程可以调用它来通知父进程.这个回调是一个闭包,它保持对父进程的引用.)应用程序是多线程的.现在,这个设置是整个大黄蜂的潜在竞争条件和死锁的巢.要理解原因,这是一个天真的实现:

class Parent {
 public:
   Parent() {
     children_["apple"].reset(new Child("apple", this));
     children_["peach"].reset(new Child("peach", this));
   }

   ~Parent() {
   }

   void ChildDone(const string& child) {
     cout << "Child is DONE: " << child << endl;
   }

  private:
   map<string, linked_ptr<Child> > children;
}; 

class Child {
  public:
   Child(const string& name, Parent* parent) 
       : name_(name), parent_(parent), done_(false) {}

   Foo(int guess) {
     if (guess == 42) done_ = true;
     parent->ChildDone(name_);
   }

  private:
   const string name_;
   Parent* parent_;
   bool done_; 
};
Run Code Online (Sandbox Code Playgroud)

潜在问题:

  • 在破坏父母期间,必须留意其子女正在进行的回调.特别是如果那些回调在一个单独的线程中被触发.如果不是,则在调用回调时可能会消失.
  • 如果父级和子级中都存在锁(很可能是在多线程的非平凡应用程序中),则锁定顺序成为问题:父级调用子级上的方法,而子级又经历状态转换并尝试通知父母:死锁.
  • 如果子项尝试从其析构函数通知父项,则在构造函数外添加/删除子项可能会出现问题.父级必须持有锁以修改子级映射,但子级正在尝试对父级进行回调.

    我只是触及了表面,但人们可以想到其他潜在的问题. …

  • c++ multithreading deadlock locking

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

    std :: vector insert,不知道元素的类型

    假设我有一个模板化的函数,它采用各种向量(但由于各种原因,我不能在模板参数中提到这一点).这是我正在尝试做的事情:在特定位置插入一个新的默认构造元素,而不知道它的类型:

    template <typename T>
    void foo(T* v) {
      v->insert(v->begin() + 5, decltype(v->at(0))());
    }
    
    Run Code Online (Sandbox Code Playgroud)

    这不起作用,但让您了解我正在尝试做什么.我也试过使用value_type,std::vector但我也遇到了问题.任何想法如何解决这个问题?

    c++ vector c++11

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

    在Chrome开发工具中显示JavaScript异常消息

    我正在使用Chrome开发工具来调试我的JavaScript.当我告诉Chrome"不要暂停异常"并加载我的脚本时,我会清楚地了解突出显示的正确行的错误:

    var back_buffer = goog.dom.getElement('back_buffer').getContext('2d');
      --> "Uncaught TypeError: Cannot call method 'getContext' of null"
    
    Run Code Online (Sandbox Code Playgroud)

    好吧,这是有道理的:我的canvas元素名称中有一个拼写错误,因此'getElement'返回null.

    现在回答我的问题:当我告诉Chrome"暂停未捕获的异常"时,它仍会正确地突出显示我的脚本中的违规行,但现在这个漂亮,可理解的错误描述已经消失了!怎么会?即使在调试模式下,我也希望看到错误消息,因为它非常有用.我四处乱窜,却找不到任何地方.

    有人可以帮忙吗?

    javascript google-chrome google-chrome-devtools

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

    CSS max-height with inherit

    CSS引用明确表示max-height不会继承.问题是,我希望它是继承的.但是,我似乎无法获得正确的CSS咒语.事实上,我有一个CSS课程,我想申请DIV,然后强制说所有DIV的孩子都尊重这个max-height属性:

    .my-viewer {
      max-height: 800px;
    }
    
    * {
      max-height: inherit;
    }
    
    Run Code Online (Sandbox Code Playgroud)

    不幸的是,上面的代码不起作用.例如,在Chrome开发工具中,"max-height"的"继承"设置被删除,因为已禁用.知道如何解决这个问题吗?

    css css-selectors

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

    使用单个查找初始化Java Map中的条目(如在C++中)

    在C++中,我可以在地图中查找一个键并插入它,如果它不存在单个查找的成本.我可以用Java做同样的事吗?

    更新:

    (对于那些必须看代码的人.)

    long id = 0xabba;
    int version = 0xb00b;  
    for (List<Object> key : keys) {
        if (!index.containsKey(key)) {
          index.put(key, Maps.<Long,Integer>newHashMap());
        }
        index.get(key).put(id, version);
    }
    
    Run Code Online (Sandbox Code Playgroud)

    当键首次插入地图时,有两个查找.在C++中,我可以通过单个查找来完成它.

    java collections

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

    如何根据 Linux 上的路径判断文件是否位于 tmpfs 上?

    这可能是一个愚蠢的问题,但假设我给出了一个文件路径,并且我想知道它是否指向 tmpfs 上的文件(即,它是内存中的文件)。如何仅使用 Linux 系统调用来做到这一点?(也就是说,我不能去shell。)

    linux tmpfs

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