Python:将一个文本数组附加到另​​一个文本数组会添加“u”?

时间:2015-03-25 03:29:08

标签: python arrays tkinter

对于任何真正了解如何使用Python的人来说,这应该是一个非常容易回答的问题(显然不是我)。我使用的是Python 2.7.9,我在这个网站上找到了一些示例代码:

http://pythonicprose.blogspot.com/2010/04/python-tkinter-frontend-example-to-ping.html

但是当我运行模块时,回复文本不是一个ping时间,它是:

Ping请求无法找到主机www.google.com。请检查姓名,然后重试。

所以我添加了一些print语句,发现应该传递给命令行的字符串是添加" u"像这样:

www.google.com

['ping', '-n', '1']
['ping', '-n', '1', u'www.google.com\n']

那么你如何在' 1'和www.google.com \ n'怎么能摆脱它?我认为它具有某种逃避性质,但我无法弄清楚它的添加位置。

from Tkinter import *
from subprocess import PIPE, Popen

class App:
    def __init__(self, master):
        frame = Frame(master)
        frame.grid()

        # create and position widgets

        self.label = Label(frame, text="Enter IP Address or Server Name:")
        self.label.grid(row=0, column=0, sticky=W)

        self.textbox = Text(frame, height=1, width=40)
        self.textbox.grid(row=1, column=0, columnspan=2, sticky=W)
        self.textbox.insert(END, "www.google.com")

        self.resultsBox = Text(frame, height=10, width=60)
        self.resultsBox.grid(row=3, column=0, columnspan=3, sticky=W)

        self.hi_there = Button(frame, text="Ping",
                               width=10, command=self.doPing)
        self.hi_there.grid(row=1, column=2, sticky=W)

    def doPing(self):
        # reset result box
        self.resultsBox.delete(1.0, END)
        # get text

        texttext = self.textbox.get(1.0, END)
        exelist = ['ping', '-n', '1']
        exelist.append(texttext)
        # Execute command (these ping commands are windows specific).
        # In Linux you would use the '-c' to specify count.

        exe = Popen(exelist, shell=False, stdout=PIPE, stderr=PIPE)
        out, err = exe.communicate()
        while out:
            self.resultsBox.insert(END, out)
            out, err = exe.communicate()

root = Tk()
app = App(root)
root.mainloop()

2 个答案:

答案 0 :(得分:4)

" u"只是意味着字符串" www.google.com \ n"是一个Unicode字符串,它应该对你的程序没有任何影响。

问题更可能是你试图ping通#google; www.google.com \ n"而不是" www.google.com" (注意那里有一个新行。)

在尝试ping之前尝试从输入中删除空格。即:exelist.append(texttext)变为exelist.append(texttext.strip())

答案 1 :(得分:0)

根据您处理它的方式,最后一个字符串看起来像是一个unicode字符串。如果你想让每个人都成为ASCII字符串,你可以在所有类成员上使用str:

In [1]: a = u'i am unicode'

In [2]: b = 'i am ascii\n'

In [3]: x = [a, b]

In [4]: print x
[u'i am unicode', 'i am ascii\n']

In [5]: print [ str (s) for s in x ]
['i am unicode', 'i am ascii\n']