python-如果被函数调用,守护进程不工作

python-daemon does not work if called by function

我正在尝试使用 python-daemon 库生成一个将写入文件的守护进程。

当我直接在"if __name__ == '__main__'"语句中创建守护进程时,守护进程成功写入文件:

from daemon import DaemonContext
def main():
    my_file.write("Daemon creation was successful")
    my_file.close()

if __name__ == "__main__":
    my_file = open("my_file", "w+")
    with DaemonContext(files_preserve=[my_file.fileno()]):
        main()

但是,当我使用单独的函数创建守护进程时,守护进程不会写入文件:

from daemon import DaemonContext
def main():
    my_file.write("Daemon creation was successful")
    my_file.close()

def create_daemon():
    my_file = open("my_file", "w+")
    with DaemonContext(files_preserve=[my_file.fileno()]):
        main()

if __name__ == "__main__":
    create_daemon()

工作示例中的 if 语句和非工作示例中的 "create_daemon" 函数共享完全相同的代码。那为什么我不能通过调用函数来创建守护进程呢?

这与守护进程无关。 main 无权访问 my_file;你没有将文件作为参数或任何东西传递。

在您的第二个示例中,main 函数引用了 my_file,它不在该函数的范围内。

def main():
    my_file.write("Daemon creation was successful")
    my_file.close()

该函数将(如果您的示例完整)为 my_file 名称引发 NameError

一种更正方法是使 my_file 成为 main 的参数。