我在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
答案 0 :(得分:2)
查看subprocess模块。使用 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()
然后,您可以旋转文件并重新启动该过程。
答案 1 :(得分:1)
您应该强烈考虑使用multiprocessing.Process内置类,而不是直接调用os.system
。它更优雅地处理衍生过程。
您需要定期查看输出文件,使用os.stat
之类的内容来检查文件大小。然后,当超过阈值时,您可以终止原始进程(或任何您想要做的事情)。
答案 2 :(得分:0)
java应用程序在运行时是否向stdout或stderr提供任何输出(例如,处理的记录数)?如果是这样,你可以使用Python的Popen类(在子进程模块中)调用它并估计它何时处理'太多'。