如何限制python子进程创建的文件大小?
我从python运行一个子流程,如下所示(不是我的脚本): 有时,这个过程会变得疯狂(由于一个间歇性错误),并将大量错误转储到stdout/logfile中,使其增长到40Gb并填满磁盘空间 防止这种情况发生的最好办法是什么?作为一名python新手,我有两个想法:如何限制python子进程创建的文件大小?,python,Python,我从python运行一个子流程,如下所示(不是我的脚本): 有时,这个过程会变得疯狂(由于一个间歇性错误),并将大量错误转储到stdout/logfile中,使其增长到40Gb并填满磁盘空间 防止这种情况发生的最好办法是什么?作为一名python新手,我有两个想法: 将子流程管道化为类似于head的内容,如果输出增长超过限制,将中止它(不确定subprocess.run是否可以实现这一点,或者我是否必须使用低级别Popen方式) 查找或创建一些方便的IO包装器类IOLimiter,该类IOLi
- 将子流程管道化为类似于
的内容,如果输出增长超过限制,将中止它(不确定subprocess.run是否可以实现这一点,或者我是否必须使用低级别Popen方式)head
- 查找或创建一些方便的IO包装器类IOLimiter,该类IOLimiter将在给定大小后抛出错误(在stdlib中找不到类似的内容,甚至不确定在何处查找)
popen
方法,设置PYTHONUNBUFFERED=1
test_proc = subprocess.Popen(
my_command,
universal_newlines=True,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
)
print(time.time(), "START")
# Iterate over the lines of output produced
for out_data in iter(test_proc.stdout.readline, ""):
# Check whatever I need.
尝试添加日志记录并表示感谢。。我希望不必改变使用Popen,但这看起来不错,但我想你应该考虑终止进程,还有超时等等(以及run()所做的任何事情)。我的另一个担忧是性能——忘了提到这个文件最终是40G——所以我更喜欢一些优化的处理,而不是python循环。。还是我不该担心呢?无论如何都要用澄清来更新问题。是的,根据您的应用程序,交互有各种考虑因素。这至少为您提供了一个非阻塞的情况和一个相当有效的循环:请记住,这是管道的一端,因此循环仅在子进程写入一行时迭代。否则,父进程只是在等待。
test_proc = subprocess.Popen(
my_command,
universal_newlines=True,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
)
print(time.time(), "START")
# Iterate over the lines of output produced
for out_data in iter(test_proc.stdout.readline, ""):
# Check whatever I need.