小编Sha*_*ane的帖子

如何在桌面中间制作我的wxpython顶级框架?

我想让我的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等),还是需要一些其他属性设置?

python user-interface wxpython

8
推荐指数
2
解决办法
6668
查看次数

如果socket.setdefaulttimeout()不起作用,我该怎么办?

我正在编写一个脚本(多线程)来检索网站上的内容,而且该网站不是很稳定,所以不时有挂起的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),但同样的事情发生了.到目前为止,我仍然会随机挂起请求,有时需要几个小时,其他时间可能需要几天.现在我该怎么做?有没有办法强制这些挂起请求退出?

python http mechanize urllib urllib2

8
推荐指数
1
解决办法
2万
查看次数

告诉我为什么这不会导致超时错误(selenium 2 webdriver)?

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,你会得到相同的结果.

我的观点是,你点击一个元素后,有时可能需要长达甚至几个小时的页面加载,因为一个坏的代理了,你明明不要想等那么久,你想要的是一个超时异常.在这种情况下,你会如何使它工作?

python selenium webdriver selenium-webdriver

7
推荐指数
1
解决办法
1912
查看次数

使用python删除txt文件中的重复行(以及包含特定字符串的一些行)的最快方法是什么?

txt约为22,000行,约为3.5MB.它中有很多重复的行.我只是想删除重复的行以及一些包含不需要的特定字符串的行.

我的方法是使用readlines()方法将文件读入大列表,然后使用read()方法将文件作为大字符串读取.迭代列表,计算出现次数,用""(空字符串)替换该行.我花了10分钟才完成这份工作?!

有没有快速的方法来做到这一点?

非常感谢!

python file

6
推荐指数
1
解决办法
1834
查看次数

如何在我的 pyinstaller 打包应用程序中排除 tcl/tk 文件夹?

我正在使用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那么打包时如何排除呢?

python wxpython tkinter pyinstaller

6
推荐指数
1
解决办法
2785
查看次数

机械化"内存不足"错误

我试图从网页上逐页获取一些信息,基本上就是我所做的:

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的内存......怎么回事?!

有人会告诉我出了什么问题吗?

python memory mechanize urllib2

5
推荐指数
1
解决办法
1050
查看次数

使用Python在Selenium Webdriver(Selenium 2)中显式等待和隐式等待的问题

我必须与一些非常慢的代理一起工作并且时不时地陷入困境.因此,我正在尝试为此找到解决方案/解决方法,这是我的问题:

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完全加载,在某些极端情况下可能需要数小时.

我该怎么做才能避免这种情况?

python selenium-webdriver

5
推荐指数
1
解决办法
5117
查看次数

Python - 快速删除此列表中的重复项?

你知道,转一下清单:

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 list

5
推荐指数
1
解决办法
962
查看次数

如何在两台具有公共IP但都位于LAN后面的机器之间进行通信(python解决方案)?

正在寻找一个简单的 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 sockets networking

5
推荐指数
1
解决办法
2126
查看次数

你如何解码python中的ascii字符串?

例如,在你的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\x3eb,这应该是<div>

谢谢

python string ascii character-encoding

4
推荐指数
2
解决办法
3万
查看次数