Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Вывод результата выполнения команд вызываемого bat-ника в Label [RSS Feed]

#1 Март 22, 2015 20:56:31

victoreva
Зарегистрирован: 2015-03-17
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод результата выполнения команд вызываемого bat-ника в Label

Спасибо, как разберусь - отпишу

Офлайн

#2 Март 22, 2015 21:34:51

victoreva
Зарегистрирован: 2015-03-17
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод результата выполнения команд вызываемого bat-ника в Label

Я так понимаю в функции должно быть что-то вроде этого, но мне выдает ошибку синтаксиса в последней строке нижеприведенного кода. Никак не могу понять, что не так. Вроде все тоже самое сделал, что и в статье.

def export(event):	
 cmd=('call export.bat')
 proba=subprocess.check_call(cmd,shell=True,stdout=subprocess.PIPE, stderr=stdout) 
 s=' ' 
 while s:
  s=proba.stdout.readline()
  print s.rstrip()

Отредактировано victoreva (Март 22, 2015 21:43:00)

Офлайн

#3 Март 22, 2015 21:50:56

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Вывод результата выполнения команд вызываемого bat-ника в Label

from tkinter import *	
import re
import os
import subprocess
#
def window_deleted():		
       root.quit()
def send_text(msg):
     text.insert("end", msg)
     text.update()
def close_win():
     root.destroy()
def export(event):	
	cmd=('call export.bat')
        proba=subprocess.check_call(cmd,shell=True,stdout=sp.PIPE, stderr=stdout) 
        s=' ' 
        while s:
            send_text(proba.stdout.readline())
def import(event):	
	cmd=('call bat2.bat')
	subprocess.check_call(cmd, shell=True)
root= Tk()		
m = Menu(root) 
root.config(menu=m) 
root.title(u'SecurytiUp')
root.protocol('WM_DELETE_WINDOW', window_deleted)
w, h = root.winfo_screenwidth() - 4, root.winfo_screenheight() - 4
root.geometry("{}x{}+0+0".format(w, h))  
root.attributes('-fullscreen', 1) 
frame1=Frame(root,width=100,heigh=100,bg='green',bd=5)
frame1.pack()
text = Text(frame)
text.pack()
button1 = Button(frame1, text="Экспорт",width=30,height=5, bg="white",fg="blue")	
button1.bind("<Button-1>",export) 
button1.pack()
button2 = Button(frame1, text="Импорт",width=30,height=5, bg="white",fg="blue")
button2.bind("<Button-1>",import) 
button2.pack()
root.mainloop()	

P.S. from tkinter import* не делайте….

P.S.S. Писал на глаз. Могут быть ошибки. Если будут - пишите.

Отредактировано 4kpt_III (Март 22, 2015 22:06:24)

Офлайн

#4 Март 22, 2015 22:10:04

victoreva
Зарегистрирован: 2015-03-17
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод результата выполнения команд вызываемого bat-ника в Label

Запускается прога, но ничего не выводит и вылезает ошибка:
NameError: name ‘stdout’ is not defined.
И вы еще сказали можно сделать так, чтоб нельзя было редактировать поле текстовое. Можете сразу и это написать?

P.S. Чтоб затирало логи нужно очищать каждый раз текстовое поле в начале вызова функции вывода? Или есть какой то метод?


P.S.S. Я так понял это я неправильно написал вывод ошибок: stderr=stdout, надо было видимо stderr=subprocess.stdout писать?

Убрав атрибут stderr и попробовав запустить программу, консоль пишет об ошибке :
AttributeError: ‘int’ object has no attribute ‘stdout’

Отредактировано victoreva (Март 22, 2015 22:31:26)

Офлайн

#5 Март 22, 2015 23:31:48

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Вывод результата выполнения команд вызываемого bat-ника в Label

1. Для блокировки можно использовать state=“disabled”. Но это блокировка от ввода. От копирования нужно проверять. На крайний случай можно перехватить обработчики ctrl-c, ctri-ins.

2. Да. Есть метода .delete(старт, конец). В Вашем случае нужно указать начало и конец документа.

3. А вот это мы же договорились. Вы уже сами

Офлайн

#6 Март 23, 2015 14:41:50

victoreva
Зарегистрирован: 2015-03-17
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод результата выполнения команд вызываемого bat-ника в Label

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


from tkinter import *	
import re
import os
import subprocess
import sys
def window_deleted():		
      root.quit()
def send_text(msg):
     text.insert("end", msg)
     text.update()
def close_win():
     root.destroy()
def export(event):	
	
 cmd=('call export.bat')
 proba=subprocess.check_call(cmd,stdout=subprocess.PIPE, stderr=subprocess.STDOUT  )
 s=' ' 
 while s:
  send_text(proba.stdout.readline())
root= Tk()		 
m = Menu(root) 
root.config(menu=m) 
frame1=Frame(root,width=100,heigh=100,bg='green',bd=5)
frame2=Frame(root,width=200,heigh=200,bg='red',bd=5)
frame1.pack()
frame2.pack()
text = Text(frame2,state='disabled')
text.pack()
but1 = Button(frame1, text="Экспорт",width=30,height=5, bg="white",fg="blue")	
but1.bind("<Button-1>",export) 
but1.pack() 
root.mainloop()	


Но опять же возникает ошибка:

Exception in Tkinter callback
Traceback (most recent call last):
File “C:\Python34\lib\tkinter\__init__.py”, line 1533, in __call__
return self.func(*args)
File “proba.pyw”, line 35, in export
proba=subprocess.check_call(cmd,stdout=subprocess.PIPE, stderr=subprocess.ST
DOUT )
File “C:\Python34\lib\subprocess.py”, line 556, in check_call
retcode = call(*popenargs, **kwargs)
File “C:\Python34\lib\subprocess.py”, line 537, in call
with Popen(*popenargs, **kwargs) as p:
File “C:\Python34\lib\subprocess.py”, line 859, in __init__
restore_signals, start_new_session)
File “C:\Python34\lib\subprocess.py”, line 1112, in _execute_child
startupinfo)
FileNotFoundError: Не удается найти указанный файл

Отредактировано victoreva (Март 23, 2015 14:47:05)

Офлайн

#7 Март 23, 2015 14:48:49

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Вывод результата выполнения команд вызываемого bat-ника в Label

victoreva
FileNotFoundError: Не удается найти указанный файл

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

import os
print os.getcwd()
for obj in os.listdir(os.getcwd()):
    print "-- {}".format(obj)

На экране отобразится путь к папке, где запускается скрипт. И все файлы в этой папке. Необходимо проверить, есть ли там запускаемый файл.

Офлайн

#8 Март 23, 2015 15:36:49

victoreva
Зарегистрирован: 2015-03-17
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод результата выполнения команд вызываемого bat-ника в Label

Синтаксическая ошибка, ругается на строку:
print os.getcwd()

Ну а если так смотреть папку, то конечно скрипт лежит в одной папке с python файлом.

Офлайн

#9 Март 23, 2015 16:16:35

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Вывод результата выполнения команд вызываемого bat-ника в Label

Какая ошибка?

Офлайн

#10 Март 23, 2015 18:48:33

victoreva
Зарегистрирован: 2015-03-17
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод результата выполнения команд вызываемого bat-ника в Label

File “proba2.py”, line 11
print os.getcwd()
^
SyntaxError: invalid syntax

Офлайн

  • Начало
  • » GUI
  • » Вывод результата выполнения команд вызываемого bat-ника в Label[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version