即使在python中执行IF stmt,也会执行ELSE stmt

时间:2016-04-24 12:13:08

标签: python python-2.7

我有以下代码,其中包含if-else语句。当我打印它时,即使if部分也被执行,看起来似乎已经执行了else部分。我用cat -A运行它,缩进看起来很好

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

顺便说一句,所有代码都驻留在循环中。

我很欣赏这种行为的任何想法......

2 个答案:

答案 0 :(得分:3)

那是因为os.fork()正在创建一个新的子进程。执行两个进程,现有父进程和新子进程,继续os.fork()之后的行。

子项的PID在父项中可用作os.fork()的返回值,因此它执行if部分。

在子节点中,PID为0,导致else部分被执行,

两个进程(父进程和子进程)都在stdout上生成输出,该输出显示在终端中。

所以不是两个 ifelse语句都在一个进程中执行的情况;一个由父进程执行(当返回非零PID时),另一个由子进程在PID为零时执行。

答案 1 :(得分:0)

您有两个进程:原始进程(父进程)和使用fork创建的新进程,因为两个进程写入相同的输出,然后您将遇到输出的干扰:父进程中的PRINT IF和子进程中的PRNT。 你可以通过为每个进程归因不同的输出(例如2个不同的文本文件)来解决这个问题