Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 21, 2010 19:59:01

Nosaer
От:
Зарегистрирован: 2010-09-29
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод с консоли в интерператор

Решил написать программу, для своевременного быстрого доступа к своему компьютеру. В виде сервера и клиента.
Управление производится с помощью обращения к cmd, то есть через os.system отправляю команды в консоль windows.
Есть ли возможность наблюдать то, что в этот момента выводится в консоли?!
В слепую совершать сложные операции не очень то и удобною



Офлайн

#2 Дек. 21, 2010 23:01:57

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Вывод с консоли в интерператор

Ловите данные из stdout и шлете себе (см перенаправление stdout). А вы telnet, rsh и прочие стандарные средства
не хотите принципиально использовать?



Офлайн

#3 Дек. 22, 2010 08:40:21

Nosaer
От:
Зарегистрирован: 2010-09-29
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод с консоли в интерператор

не то чтобы принципиально, но хотелось бы просто остаться в рамках самого языка.
stdout я с ним разобрался в том плане, что получаю вывод с консоли только после того как функция полностью выполнена, то есть не ждет ответа от пользователя.Если же необходимо ввести подтверждение, или просто задать тоже время. То вывод уже не приходит. Как можно решить эту проблему?!



Офлайн

#4 Дек. 22, 2010 23:29:22

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Вывод с консоли в интерператор

Я сам новичек - поэтому привожу что умею

import subprocess as sp
import time
from threading import Thread

class Tcmd(Thread):
def __init__ (self):
Thread.__init__(self)
self.evt=threading.Event()
def run(self):
self.c=sp.Popen(["cmd"],stdin=sp.PIPE,stdout=sp.PIPE)
self.evt.set()
while 1:
a=self.c.stdout.readline()
if not a:
break
print("send:"+a)
def put(self,cmd):
self.c.stdin.write(cmd)

obj=Tcmd()
obj.start()
obj.evt.wait()
obj.put("dir\n")
time.sleep(2)
obj.put("echo\n")
time.sleep(2)
obj.put("exit\n")
obj.join()



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version