LINUX.ORG.RU

Как запустить процесс через telnetlib?

 


1

2

Хочу запустить команду на сервере через telnet, при этом команда занимает определенное время и хорошо бы ее запустить в фоне.

Делаю так:

tn = telnetlib.Telnet('192.168.0.100')
tn.read_until(b"# ")
tn.write(b'echo "test01" > /tmp/test && sleep 5 && echo "test02" >> /tmp/test &\n\n')
tn.write(b"exit\n")
dt = tn.read_all().decode('ascii')
print(dt)

По идее третья строка должна была запустить команду в фоне и эта команда должна была выполниться не зависимо от питоноскрипта. На практике получается так, что без шестой строки команда попросту не выполняется, а с шестой выполняется нормально, но скрипт ждет ее завершения.

★★★★★

2016 год на дворе, а ты через telnet команды запускаешь, ай-ай-ай. Переключайся на ssh + paramiko.

По сабжу - nohup

ei-grad ★★★★★
()
Ответ на: комментарий от ei-grad

Переключайся на ssh + paramiko

Слишком долго работает.

nohup

К сожалению нет этой команды и поставить не представляется возможным

Siado ★★★★★
() автор топика

в питоне нет форка?

anonymous
()
Ответ на: комментарий от Siado

По идее третья строка должна была запустить команду в фоне и эта команда должна была выполниться не зависимо от питоноскрипта.

ну мне, право, даже сказать больше нечего

Dred ★★★★★
()
Ответ на: комментарий от Siado

Парамико да, знатный тормоз, но вот с «нативным» ssh работается нормально.

alozovskoy ★★★★★
()

dt = tn.read_all().decode('ascii')

Как ты хочешь получить весь выхлоп команды до того, как она выполнится?

На практике получается так, что без шестой строки команда попросту не выполняется

Без print(dt) команда не выполняется?

proud_anon ★★★★★
()
Ответ на: комментарий от proud_anon

На практике получается так, что без шестой строки команда попросту не выполняется

Без print(dt) команда не выполняется?

Опечатка, без пятой: dt = tn.read_all().decode('ascii')

Siado ★★★★★
() автор топика
Ответ на: комментарий от Siado

Опечатка, без пятой: dt = tn.read_all().decode('ascii')

Хмм...

Я никогда не пользовался telnetlib, но судя по RFC 854 (протокол Telnet), можно попробовать после всех команд сделать tn.write(telnetlib.GA) (или приклеить байт GA к последней команде).

proud_anon ★★★★★
()
Ответ на: комментарий от proud_anon

.GA не помогло, но помогла такая конструкция:

tn = telnetlib.Telnet('192.168.0.100')
tn.read_until(b"# ")
tn.write(b'echo "test01" > /tmp/test && sleep 5 && echo "test02" >> /tmp/test &\n\n')
tn.write(b"exit\n")
tn.read_until(b"exit")

В таком случае все отрабатывает как надо

Siado ★★★★★
() автор топика

я в подобном случае делал примерно так

os.system('''ssh remotehost "mysupercommand </dev/null >/dev/null 2>&1 &"''')

zolden ★★★★★
()
Ответ на: комментарий от Siado

А, получается, что на том конце все команды посылаются обратно. Понятно.

proud_anon ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.