对于任何真正了解如何使用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()
答案 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']