即使在python中执行IF stmt,也执行ELSE stmt
问题描述:
我有以下一段包含if-else语句的代码。当我打印它时,即使执行了if部分,它看起来仍然执行了else部分。我与猫-A运行它,并缩进看起来很好即使在python中执行IF stmt,也执行ELSE stmt
print "PRINT os.fork"
pid = os.fork()
if pid:
print "PRINT IF %d" %pid
os.close(write_fd)
self.pid2file[pid] = read_fd
else:
print "PRINT ELSE"
signal.signal(signal.SIGTERM, signal.SIG_DFL)$
这里是输出:
PRINT os.fork
PRINT IF 63185
PRINT ELSE
顺便说一句,所有的代码都驻留在一个循环中。
我很欣赏这种行为的任何想法...
答
这是因为与os.fork()
要创建一个新的子进程。执行这两个过程,现有的父母和新的孩子从os.fork()
之后的行继续。
孩子的PID在父亲中可用作为os.fork()
的返回值,所以它执行if
部分。
在儿童中,PID是0,这将导致部分else
要执行,
两种方法中,父和子,产生在其上显示在终端的stdout输出。
所以不是这样的情况,都if
和else
语句在一个进程中执行;一个由父进程执行(当返回非零PID时),另一个由PID进程为零时的子进程执行。
答
您有两个进程:原始进程(父进程)和您使用fork创建的新进程,因为两个进程写入相同的输出,则会遇到输出的干扰:父PRINT IF进程和其他PRNT在子进程中。 你可以通过为每个进程分配不同的输出(例如2个不同的文本文件)来解决这个问题
+0
感谢您的快速回复! – revit
你可以在那里使用fork()。所以会有两个过程:一个是pid = 0(孩子),另一个是pid =某事(父母)。父母将进入如果分支,孩子是其他人。 – syntonym