否则即使stmt是在python中执行的,也会执行stmt
我有下面一段代码,其中包含if-else语句。当我打印它时,它看起来像是执行了else部分,即使if部分也执行了。我用cat-A运行,压痕看起来很好否则即使stmt是在python中执行的,也会执行stmt,python,python-2.7,Python,Python 2.7,我有下面一段代码,其中包含if-else语句。当我打印它时,它看起来像是执行了else部分,即使if部分也执行了。我用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.sign
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 else。
您可以通过为每个使用fork()的进程指定不同的输出(例如2个不同的文本文件)来解决此问题。因此将有两个进程:一个是pid=0(子进程),另一个是pid=something(父进程)。家长将输入if分支,孩子将输入else。感谢您的快速回复!