Я пытаюсь запустить простой сервер при запуске. OS, которую я использую, - Debian 6.0. Я добавил строку в моем .profile для запуска скрипта python: python /root/desktopnavserver2.py
Компьютер загружается и регистрируется, однако я получаю сообщение об ошибке ниже. Скрипт отлично работает, когда у меня нет строки добавления в debian .profile, и я просто запускаю скрипт сам в консоли. Любая помощь?Запуск простого TCP-сервера Python при входе в систему Debian
Трассировка Ошибка:
Traceback (most recent call last):
File "/root/Desktop/navserver2.py", line 39, in <module>
server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
File "/usr/lib/python2.6/SocketServer.py", line 402, in __init__
self.server_bind()
File "/usr/lib/python2.6/SocketServer.py", line 413, in server_bind
self.socket.bind(self.server_address)
File "<string>", line 1, in bind
error: [Errno 98] Address already in use
Источник:
#!/usr/bin/python
import SocketServer
import serial
com2 = serial.Serial(
port = 1,
parity = serial.PARITY_NONE,
bytesize = serial.EIGHTBITS,
stopbits = serial.STOPBITS_ONE,
timeout=3,
xonxoff = 0,
rtscts = 0,
baudrate = 9600
)
class MyTCPHandler(SocketServer.BaseRequestHandler):
"""
The RequestHandler class for our server.
It is instantiated once per connection to the server, and must
override the handle() method to implement communication to the
client.
"""
def handle(self):
# self.request is the TCP socket connected to the client
self.data = self.request.recv(1024).strip()
#print "%s wrote:"%self.client_address[0]
#print self.data
# just send back the same data, but upper-cased
self.request.sendall(self.data.upper())
com2.write(self.data)
if __name__ == "__main__":
HOST, PORT = "192.168.0.200", 14052 #change to 192.168.0.200
# Create the server, binding to localhost on port 9999
server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
# Activate the server; this will keep running until you
# interrupt the program with Ctrl-C
server.serve_forever()
hmms Иногда сценарий работает нормально, а другие - нет. Похоже, сценарий на самом деле работает дважды, как вы предложили, но я не знаю, почему. Когда я получаю эту ошибку, и я набираю lsof -i, я вижу, что есть скрипт python с использованием того же порта. Проблема в том, что если я удаляю строку из .profile, которая запускает скрипт, экземпляров сценария нет. – Richard
Вы используете несколько терминалов/окон? Если это так, вам нужно будет проверить, что сценарий еще не запущен, когда вы запускаете его через строку 'ps -ef' в вашем .profile – KevinDTimm