& Quot; Delayed & Quot; запись в файл в Python

У меня очень специфическая проблема, и я не знаю, как от нее избавиться. Я отправляю некоторые данные через php клиент на веб-сервере. Код выглядит так:

<?php
session_start();

include 'db_con.php';
include('db_functions.php');

error_reporting(E_ALL);

/* Get the port for the WWW service. */
$service_port = $_SESSION['port'];

/* Get the IP address for the target host. */
$address = $_SESSION['ip'];

/* Create a TCP/IP socket. */
try {
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
} catch (Exception $e) {
echo "error" . socket_strerror(socket_last_error()) . "\n";
socket_close($socket);
}

try {
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

} catch (Exception $e) {
echo "error" . socket_strerror(socket_last_error()) . "\n";
socket_close($socket);
}

$result = socket_connect($socket, $address, $service_port);

//data from database soonTM
$in = returnResults($db);

$data = "";
foreach ($in as $r){
$data .= $r['ring_time'] . ' ' . $r['bell_mode'] . "\r\n";
}

socket_write($socket, $data, strlen($data));

echo "Reading response:\n\n";
while ($out = socket_read($socket, 2048)) {
echo $out;
}

socket_close($socket);
?>

Затем данные из базы данных отправляются на TCP-сервер, и он отлично работает, поскольку я получаю те же данные, что и отправил.

В любом случае это мой код TCP-сервера:

import socket

# Create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Bind the socket to the port
server_address = ('10.10.10.120', 10000)
print('starting up on %s port %s' % server_address)
sock.bind(server_address)while True:
# Listen for incoming connections
sock.listen(1)
# Wait for a connection
print('waiting for a connection')
connection, client_address = sock.accept()

try:
print('connection from', client_address)

# Receive the data in small chunks and retransmit it
while True:
data = connection.recv(2048)
neki = 'hello rok'
print('received "%s"' % data)
if data:
try:
dataFile = open('data.txt', 'w')

try:
dataFile.write(data)
except (Exception) as inst:
print(type(inst))
print("error at writing to file")
except (Exception) as inst:
print(type(inst))
print("error opening file")
print('sending data back to the client')
#connection.sendall(bytes(neki, 'UTF-8'))
connection.sendall(neki)
break
except (Exception) as inst:
print(type(inst))
print("error opening connection")

finally:
# Clean up the connection
connection.close()

И, кажется, работает отлично, так как в терминале он печатает материал, который я отправил через TCP-клиент. Однако проблема заключается в записи в файл data.txt. Когда я отправляю данные в первый раз, в файл ничего не записывается. Если я отправлю его снова, он будет работать как положено (даже если в терминале напечатаны правильные данные). Если я добавлю еще одну строку в свою базу данных и отправлю ее снова, старое значение снова будет записано в файл. Если я отправлю его снова, будет добавлено новое значение.

-1

Решение

Вам нужно закрыть свой файл. Я думаю, что проблема в этом. Пожалуйста, попробуйте добавить блок finally:

       try:
dataFile = open('data.txt', 'w')

try:
dataFile.write(data)
except (Exception) as inst:
print(type(inst))
print("error at writing to file")
except (Exception) as inst:
print(type(inst))
print("error opening file")
finally:
dataFile.close()
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]