这个问题在这里已有答案:
这是一个test.py文件:
#!/usr/bin/python
print "hello"
a=raw_input()
print a
当使用./test.py运行这个文件时,它会首先打印'hello',然后让我输入一个,最后打印一个,没有什么不对,它的工作原理如下:
> hello
> 123
> 123
当然它可以正常工作。
但是当我想使用netcat连接这个py文件时,首先我执行:socat tcp-l:9991,fork exec:python test.py
然后我在本地机器中使用另一个shell来连接py文件:nc 127.0.0.1 9991
然后py文件将首先要求我输入一个而不是打印'hello',然后在我输入之后,它将打印'hello'并最终打印a,它的工作原理如下:
> 123
> hello
> 123
显然这是一个错误的执行序列,所以我想知道为什么会发生这件事?我应该怎么做才能解决这个问题,当我用nc连接它时,让它以正确的顺序运行。非常感谢你!
使用print语句,您将写入输出流,但默认情况下不会立即刷新它。尝试这样的事情:
#!/usr/bin/python
import sys
print "hello"
sys.stdout.flush()
a=raw_input()
print a
sys.stdout.flush()
这将强制它显示stdout缓冲区中的任何内容。