У меня была аналогичная проблема, которую я решил, вызвав программу, которую я пытался подключить к telnet, в класс spawn pexpect и проект telnet miniboa. Обернув программу в pexpect, вы можете безопасно читать и записывать в stdin/stdout.
Чтобы использовать функцию ввода, pexpect использует регулярные выражения, чтобы знать, когда прекращать чтение и вводить данные, поэтому я добавил '>' в конец моего чтения из функции stdin.
class Client(object):
def __init__(self, client):
self.client = client
self.process = pexpect.spawnu(PROGRAM)
def on_connect(client):
clients.append(Client(client))
def process_clients():
"""
Check each client, if client.cmd_ready == True then there is a line of
input available via client.get_command().
"""
for client in clients:
if client.active and client.cmd_ready:
# If the client sends input echo it to the chat room
interact(client)
def interact(client):
choice = client.process.expect([re.compile('\n*/>$'), '\n'])
if choice == 1: # not an input prompt
if len(client.process.before) == 0:
return
client.client.send(client.process.before+'\n')
else: #input
msg = client.client.get_command().strip()
client.process.sendline(msg)
if __name__ == "__main__":
tn = miniboa.TelnetServer(
port=7000,
address='127.0.0.1',
on_connect = on_connect
)
while True:
tn.poll()
if len(clients) > 0:
process_clients()
ПРОГРАММА - программа, которая будет называться. Это в основном почерпнуто из примеров miniboa.
Взгляните на https://pypi.python.org/pypi/miniboa. Это небольшой и легкий сервер telnet для python. Но я не уверен, что все понимаю. Вы хотите скопировать скрипт через telnet с сервера на клиентский ip? – Laszlowaty
@ Laszlowaty: Я посмотрю на это скоро. В основном я хочу, чтобы сценарий создавал сервер telnet, и когда какой-то пользователь подключается к этому серверу telnet, он запускает еще один скрипт python, размещенный на том же компьютере, что и сервер telnet. В основном позволяет им получить доступ к сценарию, который я использую через telnet. – prestotron
Ну, это просто фея. На сервере просто прочитайте пользовательский ввод, а затем правильный вход 'if' просто используйте команду os.system ('command'), чтобы запустить ваш скрипт и вывести stdout и отправить его пользователю. Но это немного проблема безопасности (не позволяйте писать какую-либо команду), только тот, который разрешен. – Laszlowaty