1

从python我调用一个java函数:

os.system("java -jar example.jar run myFunction 'inFile.txt' 'outFile.txt' " ) 

这个函数正在处理一个文件,输出被写入'outFile.txt'。输出取决于“inFile.txt”中的信息。在处理输入文件并写入输出文件时,有时“outFile.txt”变得太大(几十 GB),那时,我想退出当前处理并继续处理另一个 inFile.txt

有没有办法知道我正在编写的 outFile.txt 已经增长到超过 10GB。

编辑:正如 Maksym 所建议的,我正在使用以下代码并且似乎正在工作。谢谢

import subprocess
from time import sleep
p = subprocess.Popen(["java", "-jar", "example.jar", "run", "myFunction", "'inFile.txt'", "'outFile.txt'")
rc = p.poll()  #returncode
while (rc == None):
    sleep(1)
    if(os.path.getsize(outFileName) < 1000000000):
        rc = p.poll()
        continue
     else:
        p.kill()
        break
4

3 回答 3

2

看看子流程模块。使用Popen,您可以分叉一个进程并在需要时终止它:

import subprocess
from time import sleep
p = subprocess.Popen(["java", "-jar", "example.jar", "run", "myFunction", "'inFile.txt'", "'outFile.txt'")
while not check_my_conditions():
    sleep(my_timeout)
p.kill()

然后,您可以旋转文件并重新启动该过程。

于 2013-03-04T19:50:04.247 回答
1

os.system您应该强烈考虑使用multiprocessing.Process内置类,而不是直接调用。它更优雅地处理生成的进程。

您需要定期查看输出文件,或者使用os.stat检查文件大小之类的方法。然后,您可以在超过阈值时终止原始进程(或任何您想做的事情)。

于 2013-03-04T19:36:08.483 回答
0

java 应用程序在运行时是否向 stdout 或 stderr 提供任何输出(例如,处理的记录数)?如果是这样,您可以使用 Python 的 Popen 类(在 subprocess 模块中)调用它,并估计它何时处理了“太多”。

于 2013-03-04T19:35:49.990 回答