сохранение вывода подпроцесса с помощью tkinter - PullRequest
0 голосов
/ 16 мая 2018

мой код с подпроцессом:

def GO():
    my_sub=subprocess.Popen(['exe file','files in folder'],stderr=STADOUT,stdout=PIPE)\ 
    .communicate()[0]
    my_sub=my_sub.splitlines()
    for lines in my_sub:
       GO.a= lines
       print GO.a

В печати GO.a a have:

1
2
3
4

В кнопке сохранения:

def save():
  type = [('file', '*.txt')]
  name = filedialog.asksaveasfile(type=ftypes, mode='w', defaultextension=".xxx")


  name.write(GO.a)
  name.close()

В сохраненном файле у меня есть:

1

поэтому только 1-я строка, а не все строки

Как сохранить их все или все выходные данные из def GO()?

РЕДАКТИРОВАТЬ: (после комментариев):

def GO():
    my_sub=subprocess.check_output(['exe file','files in folder'],stderr=STADOUT)
    output=my_sub.splitlines()
    for lines in output:
       GO.a= lines
       print GO.a

При выводе кнопки сохранения я получаю только одну строку (последнюю 4) print GO.a работает хорошо, может быть, у меня что-то плохое в разделе кнопки сохранения?

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

присвоение всех строк одной и той же переменной в большинстве случаев делает это.

Popen излишне для ваших текущих потребностей. Это полезно, когда вы хотите взаимодействовать с подпроцессом более сложным способом.

Чтобы просто объединить потоки вывода + ошибок, используйте check_output вместо более простого и короткого кода. Эта функция устанавливает GO.a для выходных разделенных строк:

def GO():
    output = subprocess.check_output(['exe file','files in folder'], stderr=subprocess.STDOUT)
    GO.a = output.splitlines()

если вы используете python 3 и вам нужен текст, используйте

GO.a = output.decode().splitlines()

вместо

0 голосов
/ 16 мая 2018

Попробуйте

def GO():
    my_sub=subprocess.Popen(['exe file','files in folder'],stderr=STADOUT,stdout=PIPE)\ 
    .communicate()[0]
    lines = my_sub.splitlines()
    GO.a = my_sub
    for line in lines:
       print line
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...