如何停止Python中系统调用的当前执行
我在用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()
然后,你可以轮换你的文件并重新启动这个进程。