Nagios python脚本等待执行

时间:2019-04-27 14:54:10

标签: python python-3.x python-2.7 subprocess

我有此脚本,该脚本由nagios运行,该脚本检查提供商API是否启用了缓解功能并进行报告。我只是从Nagios复制了一个示例,我一点也不了解Python。问题在于,有时脚本需要10秒钟才能运行,而python仍在继续,因此我需要等待执行。

我发现了一些使用子过程的示例,这些示例成功了,但是我不知道如何在命令中添加.readline和.strip。

这是原始脚本:

--------------------------------------------------------------------------- InvalidArgumentError                      Traceback (most recent call last) <ipython-input-7-57d76ed539a4> in <module>
     78 vae = VAE(n_verts=15, latent_dim=2, n_layers=3, n_units=128)
     79 vae.encoder.summary()
---> 80 vae.train(X_train, n_epochs=10000, predict='frame')

<ipython-input-7-57d76ed539a4> in train(self, X, predict, n_epochs)
     70       frame = np.expand_dims( X[:,i:i+1,:].squeeze(), axis=0) # shape = 1 sample, v verts, d dims
     71       next_frame = np.expand_dims( X[:,i+1:i+2,:].squeeze(), axis=0)
---> 72       if predict == 'frame': loss = self.model.train_on_batch(frame, frame)
     73       elif predict == 'next_frame': loss = self.model.train_on_batch(frame, next_frame)
     74       if idx % 1000 == 0:

~/anaconda/envs/3.5/lib/python3.5/site-packages/keras/engine/training.py in train_on_batch(self, x, y, sample_weight, class_weight)    1215     ins = x + y + sample_weights    1216         self._make_train_function()
-> 1217         outputs = self.train_function(ins)    1218         return unpack_singleton(outputs)    1219 

~/anaconda/envs/3.5/lib/python3.5/site-packages/keras/backend/tensorflow_backend.py in __call__(self, inputs)    2713                 return self._legacy_call(inputs)    2714 
-> 2715             return self._call(inputs)    2716         else:    2717             if py_any(is_tensor(x) for x in inputs):

~/anaconda/envs/3.5/lib/python3.5/site-packages/keras/backend/tensorflow_backend.py in _call(self, inputs)    2673             fetched = self._callable_fn(*array_vals, run_metadata=self.run_metadata)    2674 else:
-> 2675             fetched = self._callable_fn(*array_vals)    2676         return fetched[:len(self.outputs)]    2677 

~/anaconda/envs/3.5/lib/python3.5/site-packages/tensorflow/python/client/session.py in __call__(self, *args, **kwargs)    1437           ret = tf_session.TF_SessionRunCallable(    1438               self._session._session, self._handle, args, status,
-> 1439               run_metadata_ptr)    1440         if run_metadata:    1441           proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)

~/anaconda/envs/3.5/lib/python3.5/site-packages/tensorflow/python/framework/errors_impl.py in __exit__(self, type_arg, value_arg, traceback_arg)
    526             None, None,
    527             compat.as_text(c_api.TF_Message(self.status.status)),
--> 528             c_api.TF_GetCode(self.status.status))
    529     # Delete the underlying status object from memory otherwise it stays alive
    530     # as there is a reference to status from this from the traceback due to

InvalidArgumentError: You must feed a value for placeholder tensor 'encoder_input_6' with dtype float and shape [?,15,3]     [[{{node encoder_input_6}}]]

那么我该如何使用子进程来实现这一点,等待外部脚本的执行并添加.readline和.strip值?

简短的问题,如何使它起作用:)

谢谢!

1 个答案:

答案 0 :(得分:0)

您在抱怨古老的历史性API允许零字节的“短读”。 是的,这是正确的,它正在按设计工作。

建议您直接使用subprocess

另外,还有两个关于awk '{print $2}'的评论:

  1. 通过调用grep删除awk '/auto/ {print $2}'
  2. 使用split()删除awk子代的开销。