假设Python中的代码框架看起来像这样。这段代码正在Ubuntu 18.04上调用另一个可并行运行的bash脚本。
#!/usr/bin/env python3
#encoding:utf-8
import subprocess
with open(file='subprocess_output.log', mode='a') as file_pointer:
subprocess.Popen(args=['./subprocess.bash'], stdout=file_pointer, stderr=file_pointer)
#Next section
正在运行。但是我很好奇,一旦主代码移至下一部分,with
语句是否正在关闭文件指针并释放资源。这不正是with
语句应该执行的操作吗?要获取并释放资源安全地?但是,如果调用后立即释放了日志文件的句柄,那么当主脚本继续运行时,子进程缓冲区如何在以后写入日志?
对于任何对操作系统如何在较低级别处理文件有更深入了解的人来说,答案都是显而易见的。因此,任何指向在线资源(双关语意味)的指针都将非常有用。
每个进程都有自己的一组打开文件。子进程是使用其父级打开文件句柄(子集)的copies(在Unix中为“描述符”,子集由FD_CLOEXEC
flag控制)创建的。 FD_CLOEXEC
立即关闭父母的手柄,但这完全不影响孩子。