Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
否则即使stmt是在python中执行的,也会执行stmt_Python_Python 2.7 - Fatal编程技术网

否则即使stmt是在python中执行的,也会执行stmt

否则即使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

我有下面一段代码,其中包含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.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。感谢您的快速回复!