使用nc连接时,为什么python代码执行顺序错误?

时间:2018-10-07 09:59:03

标签: python linux netcat

这是一个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,前叉exec:python test.py

然后我在本地计算机上使用另一个外壳来连接py文件: nc 127.0.0.1 9991

然后py文件将首先要求我输入a而不是打印“ hello”,在我输入a之后,它将再打印“ hello”并最终打印a,其工作原理如下:

> 123
> hello
> 123

显然这是一个错误的执行顺序,所以我想知道为什么会发生这种事情?而当我使用nc连接它时,我应该怎么做才能解决此问题并让它以正确的顺序运行。非常感谢!

1 个答案:

答案 0 :(得分:0)

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

#!/usr/bin/python
import sys

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

这将强制其显示stdout缓冲区中的所有内容。