如何停止Python中系统调用的当前执行

1 投票
3 回答
1001 浏览
提问于 2025-04-17 17:54

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

这个Java应用在运行的时候,会不会往标准输出(stdout)或者标准错误输出(stderr)里打印一些信息,比如处理了多少条记录?如果会的话,你可以用Python的Popen类(在subprocess模块里)来调用它,然后估算一下它什么时候处理的数据量“太多”了。

1

与其直接使用 os.system,不如考虑使用内置的 multiprocessing.Process 类。这个类在处理新启动的进程时要更好一些。

你需要定期查看输出文件,可以用 os.stat 来检查文件的大小。当文件大小超过某个限制时,你就可以结束原来的进程(或者做其他你想做的事情)。

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()

然后,你可以轮换你的文件并重新启动这个进程。

撰写回答