我终于成功编写了一个Python服务器,并能够响应多个命令并返回输出结果,但是我现在遇到了PHP无法接收完整输出的问题。我尝试过使用fgets和fread等命令,但似乎只有“fgets”命令有效。
然而,这个命令只能接收一行数据,所以我创建了下面的while语句:
然而,看起来Python服务器没有在输出的末尾发送Feof,因此php页面会超时并且不显示任何内容。就像我上面所说的,仅运行echo fgets($handle)即可正常工作,并输出一行,再次在其中一个下运行命令将显示下一行等等。
我已经附上了我的Python脚本的重要部分:
我也附上了完整的PHP脚本:
感谢您,Ashley。
然而,这个命令只能接收一行数据,所以我创建了下面的while语句:
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
echo $buffer;
}
然而,看起来Python服务器没有在输出的末尾发送Feof,因此php页面会超时并且不显示任何内容。就像我上面所说的,仅运行echo fgets($handle)即可正常工作,并输出一行,再次在其中一个下运行命令将显示下一行等等。
我已经附上了我的Python脚本的重要部分:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("", port))
s.listen(5)
print "OK."
print " Listening on port:", port
import subprocess
while 1:
con, addr = s.accept()
while True:
datagram = con.recv(1024)
if not datagram:
break
print "Rx Cmd:", datagram
print "Launch:", datagram
process = subprocess.Popen(datagram+" &", shell=True, stdout=subprocess.PIPE)
stdout, stderr = process.communicate()
con.send(stdout)
con.close()
s.close()
我也附上了完整的PHP脚本:
<?php
$handle = fsockopen("tcp://xxx.xxx.xxx.xxx",12345);
fwrite($handle,"ls");
echo fgets($handle);
fclose($handle);
?>
感谢您,Ashley。