绕过子进程没有得到回复?

时间:2017-05-16 13:01:52

标签: python python-2.7 subprocess nonblocking

我有一个守护程序,它会查询硬件并根据响应采取措施。我注意到,由于某种原因,我很少有机会得到回复而我的守护进程会启动一个新的实例。

这是因为我的代码由于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; } }); 超时,但我没有,是否有任何非阻止方法可以执行此操作?信号报警有效吗?

1 个答案:

答案 0 :(得分:0)

试试这个:

ps = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = ps.communicate()
print out
print err