python进程包装器

时间:2011-09-07 06:10:03

标签: python

我有一个在ubuntu的特定端口上运行的java程序。在运行程序时,我需要从程序中获取输出,并需要将其保存在日志文件中。我目前使用nohub运行它们。当它们失败时我不知道它们为什么会失败。然后重启过程nohub会被覆盖。我希望该进程重新启动并更新日志文件,我可以在以后查看它。目前我不知道它的状态,是运行还是失败。

我听说使用python脚本很容易。 有人请帮我这样做吗?

提前致谢 Renjith Raj

1 个答案:

答案 0 :(得分:1)

您应该使用python的subprocess模块。 如果你的日志不是太大,你可以简单地使用:

# for python >=2.7
result = subprocess.check_output(["/path/to/process_to_lauch", "arg1"])

# for python < 2.7
process = subprocess.Popen(["/path/to/process_to_lauch", "arg1"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
str_out, str_errr = process.communicate()
# in str_out you will find the standard output of your process
# in str_err you will find the standard output of your process

但是如果你的输出真的很大(让我们在Mo中讲话,而不是在Ko中讲话),这可能会导致一些内存溢出...... 如果输出很大,请使用stdout和stderr的文件句柄:

out_file = open(out_file_name, "w")
err_file = open(out_file_name, "w")
process = subprocess.Popen(["/path/to/process_to_lauch", "arg1"], stdout=out_file, stderr=err_file)
return_code = process.wait()
out_file.close()
err_file.close()

然后,在out_file中你会找到进程的输出,并在err_file中找到错误输出。

当然,如果你想在死亡时重新启动它,那么把这段代码放在一个循环中;)