我有一个守护程序,它会查询硬件并根据响应采取措施。我注意到,由于某种原因,我很少有机会得到回复而我的守护进程会启动一个新的实例。
这是因为我的代码由于communicate()
而被阻止,并且它永远不会得到回复所以永远不会返回。
ps = subprocess.Popen(cmd,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
out = ps.communicate()
return out
我能以什么方式避免这个问题?我在2.7
上使用linux
,我看到3.3+
subprocess
中有Excel.run(function (ctx) {
var worksheets = ctx.workbook.worksheets;
worksheets.load('items');
return ctx.sync().then(function () {
for (var i = 0; i < worksheets.items.length; i++) {
var sheet_name = worksheets.items[i].name;
var sheet_position = worksheets.items[i].position;
}
});
超时,但我没有,是否有任何非阻止方法可以执行此操作?信号报警有效吗?
答案 0 :(得分:0)
试试这个:
ps = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = ps.communicate()
print out
print err