使用nc连接时为什么用错误的执行顺序执行python代码?[复制]

问题描述 投票:0回答:1

这个问题在这里已有答案:

这是一个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连接它时,让它以正确的顺序运行。非常感谢你!

python linux netcat
1个回答
0
投票

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

#!/usr/bin/python
import sys

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

这将强制它显示stdout缓冲区中的任何内容。

© www.soinside.com 2019 - 2024. All rights reserved.