为什么用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()
这将强制它显示标准输出缓冲区中的任何内容。
这是一个 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()
这将强制它显示标准输出缓冲区中的任何内容。