使用tkinter保存子进程输出

时间:2018-05-16 12:14:19

标签: python tkinter

我的子代码代码:

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中有:

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

所以只有第一行,而不是所有行

如何保存全部或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

在保存按钮输出中,我只收到一行(最后一行4print GO.a效果很好,也许我在保存按钮部分有一些不好的东西?

2 个答案:

答案 0 :(得分:0)

尝试

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

答案 1 :(得分:0)

将所有行分配到同一个变量就是这样,大部分时间都是这样。

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()

代替