我想让我的GUI程序顶部框架垂直和水平对齐.
wx.Frame.__init__(self, parent=None, id= -1, title="Test Frame", pos=(-1, -1), size=(1280, 770), style=wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.MINIMIZE_BOX)
Run Code Online (Sandbox Code Playgroud)
我应该怎么做(除了计算以找到绝对位置)以pos=(-1, -1)使其显示在中间(无论是800*600还是1280*800等),还是需要一些其他属性设置?
我正在编写一个脚本(多线程)来检索网站上的内容,而且该网站不是很稳定,所以不时有挂起的http请求甚至不能被时间限制socket.setdefaulttimeout().由于我无法控制该网站,我唯一能做的就是改进我的代码,但我现在已经没想完了.
示例代码:
socket.setdefaulttimeout(150)
MechBrowser = mechanize.Browser()
Header = {'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 GTB7.1 (.NET CLR 3.5.30729)'}
Url = "http://example.com"
Data = "Justatest=whatever&letstry=doit"
Request = urllib2.Request(Url, Data, Header)
Response = MechBrowser.open(Request)
Response.close()
Run Code Online (Sandbox Code Playgroud)
我应该怎么做才能强制停止请求?实际上我想知道为什么socket.setdefaulttimeout(150)不首先工作.有人可以帮帮我吗?
补充:(和问题仍未解决)
好的,我已经按照tomasz的建议并改变了代码MechBrowser.open(Request, timeout = 60),但同样的事情发生了.到目前为止,我仍然会随机挂起请求,有时需要几个小时,其他时间可能需要几天.现在我该怎么做?有没有办法强制这些挂起请求退出?
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
browser = webdriver.Firefox()
browser.get("http://testsite.com")
element = WebDriverWait(browser, 10).until(lambda browser : browser.find_element_by_id("element"))
element.click() # it actually goes to page http://testsite.com/test-page.html
print "Just clicked! And I'm expecting timeout error!"
new_element = WebDriverWait(browser, 0.1).until(lambda browser : browser.find_element_by_id("element"))
print "Too bad there's no timeout error, why?!"
Run Code Online (Sandbox Code Playgroud)
好的,正如你所看到的,即使我将等待时间设置为0.1秒,仍然没有抛出超时异常.当element.click()执行它不会阻塞,直到整个页面加载,这就是为什么Just clicked! And I'm expecting timeout error!出现了,让我吃惊new_element = WebDriverWait(browser, 0.1).until(lambda browser : browser.find_element_by_id("element"))等到整个页面加载.如果你使用implicit waits,你会得到相同的结果.
我的观点是,你点击一个元素后,有时可能需要长达甚至几个小时的页面加载,因为一个坏的代理了,你明明不要想等那么久,你想要的是一个超时异常.在这种情况下,你会如何使它工作?
txt约为22,000行,约为3.5MB.它中有很多重复的行.我只是想删除重复的行以及一些包含不需要的特定字符串的行.
我的方法是使用readlines()方法将文件读入大列表,然后使用read()方法将文件作为大字符串读取.迭代列表,计算出现次数,用""(空字符串)替换该行.我花了10分钟才完成这份工作?!
有没有快速的方法来做到这一点?
非常感谢!
我正在使用python(wxPython for UI)在windows 7上开发一个软件,pyinstaller是我用来打包的工具。但最近将 pyinstaller 升级到 3.1.1 后,tcl/tk目录中开始出现文件夹。并且 pyinstaller 2.1 捆绑了完全相同的源代码,因此找不到这样的文件夹,这应该是这样,因为我从未在任何地方使用过 tcl/tk。
我已经尝试过a.datas -= TOC([('tcl', None, 'DATA'), ('tk', None, 'DATA')]),但它不起作用。tcl/tk那么打包时如何排除呢?
我试图从网页上逐页获取一些信息,基本上就是我所做的:
import mechanize
MechBrowser = mechanize.Browser()
Counter = 0
while Counter < 5000:
Response = MechBrowser.open("http://example.com/page" + str(Counter))
Html = Response.read()
Response.close()
OutputFile = open("Output.txt", "a")
OutputFile.write(Html)
OutputFile.close()
Counter = Counter + 1
Run Code Online (Sandbox Code Playgroud)
好吧,上面的代码最终抛出了"Out of Memory"错误,在任务管理器中它显示该脚本在运行几个小时后耗尽了近1GB的内存......怎么回事?!
有人会告诉我出了什么问题吗?
我必须与一些非常慢的代理一起工作并且时不时地陷入困境.因此,我正在尝试为此找到解决方案/解决方法,这是我的问题:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
browser = webdriver.Firefox()
browser.get("http://whateversite.com")
element = browser.find_element_by_id("element")
element.click() # go to page http://whateversite.com/page.html
new_element = browser.find_element_by_id("newElement")
Run Code Online (Sandbox Code Playgroud)
无论你是browser.implicitly_wait(30)事先设置还是使用new_element = WebDriverWait(browser, 30).until?lambda browser : browser.find_element_by_id("newElement"))它只是卡住,有时候是为了HOURS.似乎等待该页面http://whateversite.com/page.html完全加载,在某些极端情况下可能需要数小时.
我该怎么做才能避免这种情况?
你知道,转一下清单:
a = ["hello", "hello", "hi", "hi", "hey"]
Run Code Online (Sandbox Code Playgroud)
进入清单:
b = ["hello", "hi", "hey"]
Run Code Online (Sandbox Code Playgroud)
你只需这样做:
b = list(set(a))
Run Code Online (Sandbox Code Playgroud)
这是快速和pythonic.
但是,如果我需要打开这个列表怎么办:
a = [["hello", "hi"], ["hello", "hi"], ["how", "what"], ["hello", "hi"],
["how", "what"]]
Run Code Online (Sandbox Code Playgroud)
至:
b = [["hello", "hi"], ["how", "what"]]
Run Code Online (Sandbox Code Playgroud)
什么是pythonic方式呢?
正在寻找一个简单的 python 解决方案:
假设机器A的本地IP是192.168.1.5,公共IP是111.11.111.11,机器B的本地IP是10.0.0.5,公共IP是222.22.222.22,现在我需要在这两台机器之间进行通信,你该怎么做?
我见过很多服务器和客户端都在同一网络上的套接字编程示例,但是如何在不更改路由器配置(端口转发等)的情况下连接不同网络后面的机器?
编辑:
如果机器 A 在 LAN 后面怎么办:本地 IP 192.168.1.5,公共 IP 111.11.111.11;机器B是一个HTTP服务器,公共IP为222.22.222.22;现在您可以通过 HTTP 请求轻松地从 A 到达 B,但是从机器 B 到达机器 A 的最佳解决方案是什么?
例如,在你的python shell(IDLE)中:
>>> a = "\x3cdiv\x3e"
>>> print a
Run Code Online (Sandbox Code Playgroud)
你得到的结果是:
<div>
Run Code Online (Sandbox Code Playgroud)
但如果a是ascii编码的字符串:
>>> a = "\\x3cdiv\\x3e" ## it's the actual \x3cdiv\x3e string if you read it from a file
>>> print a
Run Code Online (Sandbox Code Playgroud)
你得到的结果是:
\x3cdiv\x3e
Run Code Online (Sandbox Code Playgroud)
现在我真正想要的a是<div>,所以我这样做了:
>>> b = a.decode("ascii")
>>> print b
Run Code Online (Sandbox Code Playgroud)
但令人惊讶的是,我没有得到我想要的结果,它仍然是:
\x3cdiv\x3e
Run Code Online (Sandbox Code Playgroud)
所以基本上我该怎么办转换a,这是\x3cdiv\x3e对b,这应该是<div>?
谢谢