为什么用nc连接时python的代码执行顺序错了?

Why the python codes executed with a wrong execution sequence when use nc to connect?

这是一个 test.py 文件:

#!/usr/bin/python
print "hello"
a=raw_input()
print a

使用./test.py到运行这个文件时,会先打印'hello',然后让我输入a,最后打印a,没有错,它是这样工作的:

> hello
> 123
> 123

当然它工作正常。

但是当我想使用netcat连接这个py文件时,首先我执行: socat tcp-l:9991,fork exec:python test.py

然后我在本地机器上使用另一个 shell 来连接 py 文件: 数控 127.0.0.1 9991

然后py文件会先让我输入a,而不是打印'hello',输入a后,它会打印'hello',最后打印a,它是这样工作的:

> 123
> hello
> 123

而且很明显是错误的执行顺序,所以我想知道为什么会出现这种情况?当我使用 nc 连接 it.Thank 你时,我应该怎么做才能解决这个问题并让它 运行 具有正确的顺序!

使用打印语句,您正在写入输出流,但默认情况下您不会立即刷新它。尝试这样的事情:

#!/usr/bin/python
import sys

print "hello"
sys.stdout.flush()
a=raw_input()
print a
sys.stdout.flush()

这将强制它显示标准输出缓冲区中的任何内容。