如何在python中停止当前执行系统调用

时间:2013-03-04 19:29:39

标签: python function exit

我在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

3 个答案:

答案 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类(在子进程模块中)调用它并估计它何时处理'太多'。