<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ivan Neto &#187; python</title>
	<atom:link href="http://ivanneto.com.br/tag/python/feed/" rel="self" type="application/rss+xml" />
	<link>http://ivanneto.com.br</link>
	<description>Python, software e muito mais</description>
	<lastBuildDate>Mon, 06 Feb 2012 13:53:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Começando com Python e MongoDB</title>
		<link>http://ivanneto.com.br/2012/02/05/comecando-com-python-e-mongodb/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=comecando-com-python-e-mongodb</link>
		<comments>http://ivanneto.com.br/2012/02/05/comecando-com-python-e-mongodb/#comments</comments>
		<pubDate>Sun, 05 Feb 2012 02:27:13 +0000</pubDate>
		<dc:creator>ivan</dc:creator>
				<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[mongodb]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://ivanneto.com.br/?p=34</guid>
		<description><![CDATA[O que é MongoDB? De MongoDB.org: MongoDB (from &#8220;humongous&#8221;) is a scalable, high-performance, open source NoSQL database. (MongoDB é um banco de dados NoSQL escalável, de alto desempenho e open source). MongoDB é orientado a documentos MongoDB é um banco de dados orientado a documentos, ao invés de armazenar dados em linhas e colunas como [...]]]></description>
			<content:encoded><![CDATA[<h2>O que é MongoDB?</h2>
<p>De <a title="MongoDB website" href="http://www.mongodb.org/" target="_blank">MongoDB.org</a>:</p>
<p style="padding-left: 30px;">MongoDB (from &#8220;hu<strong>mongo</strong>us&#8221;) is a scalable, high-performance, <a href="http://www.mongodb.org/display/DOCS/Source+Code" target="_blank">open source</a> NoSQL database. (MongoDB é um banco de dados NoSQL escalável, de alto desempenho e <em>open source</em>).</p>
<h3>MongoDB é orientado a documentos</h3>
<p>MongoDB é um banco de dados orientado a documentos, ao invés de armazenar dados em <em>linhas</em> e <em>colunas</em> como em um banco de dados relacional, você armazena <em>documentos </em>em <em>coleções</em>. Os documentos são basicamente objetos <a title="JSON" href="http://json.org" target="_blank">JSON</a> (tecnicamente <a title="BSON" href="http://bsonspec.org/" target="_blank">BSON</a>).</p>
<h3>MongoDB tem uma linguagem de consulta flexível</h3>
<p>Essa é uma das características que torna prazeroso trabalhar com MongoDB, principalmente se você vem de um outro banco de dados NoSQL onde as consultas têm algum tipo de restrição (armazenamentos chave-valor que podem somente ser consultados pela chave, por exemplo). Segue um exemplo de uma consulta que retorna todas as postagens de um projeto em um sistema que contém vários projetos:</p>
<pre class="brush:js">blog_post.find({'state':'published',
                'app_config_id':{'$in':app_config_ids}})</pre>
<p>Há também diversos outros operadores como &#8216;$lt&#8217;, &#8216;$nin&#8217;, &#8216;$not&#8217; e &#8216;$or&#8217;, que permitem que você crie consultas mais complexas.</p>
<h3>MongoDB é rápido e escalável</h3>
<p>Um simples nó do MongoDB é capaz de servir milhares de requisições por segundo com um <em>hardware </em>dos mais baratos. Quando for necessário escalar além disso, pode-se usar replicação (deixando diversas cópias dos dados em servidores diferentes) ou <em>sharding</em> (particionar os dados entre os servidores). MongoDB ainda contém a lógica para carregar e balancear automaticamente tais partes à medida em que o banco cresce.</p>
<h2>Começando com MongoDB</h2>
<p>Primeiro é necessário instalar os pacotes <code>mongodb</code> e <code>mongodb-server</code>. Em seguida basta iniciar o <em>deamon </em>do MongoDB:</p>
<pre class="brush:shell">$ mongod --dbpath=/home/user/local/mongodb --bind_ip 0.0.0.0;127.0.0.1</pre>
<p>Os parâmetros são opcionais, mas sempre prefiro utilizar uma pasta local (por não necessitar da senha de <em>root</em> ou do <code>sudo</code>) e fornecer uma lista de IPs de onde o servidor irá escutar. É interessante colocar esse comando em seu <em>.bashrc</em>.</p>
<p>Vamos criar um environment usando o <a title="Virtualenv no PyPI" href="http://pypi.python.org/pypi/virtualenv" target="_blank">virtualenv</a>:</p>
<pre class="brush:shell">$ virtualenv mongo -p /usr/bin/python2.6</pre>
<p>Vamos trabalhar diretamente com o PyMongo, embora seja interessante utilizar a linha de comando &#8216;mongo&#8217; do MongoDB. Você pode fazer isso acessando o <a title="MongoDB website" href="http://www.mongodb.org/" target="_blank">site do MongoDB</a> no botão <em>try it out</em>. Ativando o ambiente e instalando o <tt>pymongo</tt>:</p>
<pre class="brush:shell">$ source mongo/bin/activate
$ pip install pymongo</pre>
<h2>Criando uma conexão</h2>
<pre class="brush:py">&gt;&gt;&gt; from pymongo import Connection
&gt;&gt;&gt; connection = Connection()</pre>
<p>O código acima realiza uma conexão no <em>host</em> e porta padrão. É possível especificá-los:</p>
<pre class="brush:py">&gt;&gt;&gt; connection = Connection('127.0.0.1', 27017)</pre>
<h2>Obtendo um banco</h2>
<p>Uma única instância do MongoDB suporta múltiplos e independentes <a href="http://www.mongodb.org/display/DOCS/Databases" target="_blank">bancos de dados</a>. Usando PyMongo você pode acessar um banco de dados acessando um atributo de uma instância de <a title="pymongo.connection.Connection" href="http://api.mongodb.org/python/current/api/pymongo/connection.html#pymongo.connection.Connection" target="_blank"><tt>Connection</tt></a>:</p>
<pre class="brush:py">&gt;&gt;&gt; db = connection.test_database</pre>
<p>Se o nome de seu banco tiver caracteres que não são permitidos para nomes de variáveis, você pode acessá-lo na forma de dicionário:</p>
<pre class="brush:py">&gt;&gt;&gt; db = connection['test-database']</pre>
<h2>Obtendo uma coleção</h2>
<p>Uma coleção (ou <a href="http://www.mongodb.org/display/DOCS/Collections" target="_blank">collection</a>) é um grupo de documentos armazenados no MongoDB e pode ser comparada de modo grosseiro a uma tabela em um banco de dados relacional. Obter uma coleção no PyMongo funciona da mesma forma que obter um banco de dados:</p>
<pre class="brush:py">&gt;&gt;&gt; collection = db.test_collection</pre>
<p>ou:</p>
<pre class="brush:py">&gt;&gt;&gt; collection = db['test-collection']</pre>
<p>Uma nota importante sobre <em>collections </em>e banco de dados no MongoDB é que não é realizada nenhuma operação até que o primeiro documento seja inserido, ou seja, neste momento nossa <em>collection </em>e nossa <em>database </em>ainda não foram persistidas.</p>
<h2>Documentos</h2>
<p>Os dados no MongoDB são representados (e armazenados) usando documentos JSON-like. No PyMongo usamos dicionários para representar documentos. O seguinte dicionário pode ser usado para representar um <em>post </em>de blog:</p>
<pre class="brush:py">&gt;&gt;&gt; import datetime
&gt;&gt;&gt; post = {"author": "Mike",
...         "text": "My first blog post!",
...         "tags": ["mongodb", "python", "pymongo"],
...         "date": datetime.datetime.utcnow()}</pre>
<p>Os documentos podem conter tipos nativos do Python (como instâncias de <tt>datetime.datetime</tt>) que serão convertidos automaticamente em tipos do <a href="http://www.mongodb.org/display/DOCS/BSON" target="_blank">BSON</a>.</p>
<h2>Inserindo um documento</h2>
<p>Para inserir um documento em uma coleção basta utilizar o método <tt>insert()<tt>:</tt></tt></p>
<pre class="brush:py">&gt;&gt;&gt; posts = db.posts
&gt;&gt;&gt; posts.insert(post)
ObjectId('...')</pre>
<p>Quando um documento é inserido, a chave especial <tt>"_id"</tt> é automaticamente adicionada a ele se o mesmo não a tiver. <tt>"_id"</tt> deve ser único dentro da coleção. <a title="pymongo.collection.Collection.insert" href="http://api.mongodb.org/python/current/api/pymongo/collection.html#pymongo.collection.Collection.insert" target="_blank"><tt>insert()</tt></a> retorna o valor do <tt>"_id"</tt> do documento inserido. Após inserir o primeiro documento, a coleção <em>posts </em>é criada no servidor. Podemos verificar isso listando todas as coleções do banco:</p>
<pre class="brush:py">&gt;&gt;&gt; db.collection_names()
[u'posts', u'system.indexes']</pre>
<h2>Obtendo um único documento com <a title="pymongo.collection.Collection.find_one" href="http://api.mongodb.org/python/current/api/pymongo/collection.html#pymongo.collection.Collection.find_one" target="_blank"><tt>find_one()</tt></a></h2>
<p>O tipo mais básico de consulta no MongoDB é <a title="pymongo.collection.Collection.find_one" href="http://api.mongodb.org/python/current/api/pymongo/collection.html#pymongo.collection.Collection.find_one" target="_blank"><tt>find_one()</tt></a>. Ela retorna um único documento correspondente à consulta (ou <tt>None</tt>):</p>
<pre class="brush:py">&gt;&gt;&gt; posts.find_one()
{u'date': datetime.datetime(2012, 2, 4, 23, 6, 3, 554000), u'text': u'My first blog post!',
    u'_id': ObjectId('4f2dbb9c856f1d27bd000000'), u'author': u'Mike',
    u'tags': [u'mongodb', u'python', u'pymongo']}</pre>
<p>O resultado é um dicionário correspondente à consulta realizada. É possível também realizar uma filtragem:</p>
<pre class="brush:py">&gt;&gt;&gt; posts.find_one({'author': 'Mike'})
{u'date': datetime.datetime(2012, 2, 4, 23, 6, 3, 554000), u'text': u'My first blog post!',
    u'_id': ObjectId('4f2dbb9c856f1d27bd000000'), u'author': u'Mike',
    u'tags': [u'mongodb', u'python', u'pymongo']}
&gt;&gt;&gt; posts.find_one({'author': 'Elliot'})
&gt;&gt;&gt;</pre>
<p>Vale ressaltar que <tt>find_one()</tt> deve ser usado quando você está interessado somente no primeiro resultado correspondente à consulta. É importante lembrar também que o MongoDB armazena os dados no <a href="http://bsonspec.org/" target="_blank">formato BSON</a>. <em>Strings</em> BSON são codificadas em UTF-8 então o PyMongo precisa ter certeza de que todas as <em>strings</em> inseridas contém apenas dados válidos em UTF-8. <em>Strings </em>regulares (&lt;type ‘str’&gt;) são validadas e armazenadas sem alterações. <em>Strings unicode</em> (&lt;type ‘unicode’&gt;) são antes codificadas para UTF-8.</p>
<h2>Inserções em massa</h2>
<p>É possível fazer insersões em massa passando um <em>iterable </em>como primeiro argumento do <tt>insert()</tt>, que salvará os dados através de um único comando:</p>
<pre class="brush:py">&gt;&gt;&gt; new_posts = [{"author": "Mike",
...               "text": "Another post!",
...               "tags": ["bulk", "insert"],
...               "date": datetime.datetime(2009, 11, 12, 11, 14)},
...              {"author": "Eliot",
...               "title": "MongoDB is fun",
...               "text": "and pretty easy too!",
...               "date": datetime.datetime(2009, 11, 10, 10, 45)}]
&gt;&gt;&gt; posts.insert(new_posts)
[ObjectId('...'), ObjectId('...')]</pre>
<p>Repare que a chamada a <tt>insert()</tt> agora retorna uma lista de instâncias de <em>ObjectId</em>. Repare também que <tt>new_posts[1]</tt> não contém <em>&#8220;tags&#8221;</em> e contém <em>&#8220;title&#8221;</em>, o que nos permite dizer que MongoDB é <em>schema-free</em>.</p>
<h2>Consultando mais de um documento</h2>
<p>Para obter mais do que um único documento como resultado da consulta devemos utilizar o método <a title="pymongo.collection.Collection.find" href="http://api.mongodb.org/python/current/api/pymongo/collection.html#pymongo.collection.Collection.find" target="_blank"><tt>find()</tt></a>, que retorna uma instância de <a title="pymongo.cursor.Cursor" href="http://api.mongodb.org/python/current/api/pymongo/cursor.html#pymongo.cursor.Cursor" target="_blank"><tt>Cursor</tt></a>, permitindo a iteração sobre os documentos correspondentes. Podemos, por exemplo, iterar sobre cada documento da coleção <tt>posts</tt>:</p>
<pre class="brush:py">&gt;&gt;&gt; for post in posts.find():
...     post
...
{u'date': datetime.datetime(2012, 2, 4, 23, 6, 3, 554000), u'text': u'My first blog post!',
    u'_id': ObjectId('4f2dbb9c856f1d27bd000000'), u'author': u'Mike',
    u'tags': [u'mongodb', u'python', u'pymongo']}
{u'date': datetime.datetime(2009, 11, 12, 11, 14), u'text': u'Another post!',
    u'_id': ObjectId('4f2dcf0e856f1d27bd000001'), u'author': u'Mike',
    u'tags': [u'bulk', u'insert']}
{u'date': datetime.datetime(2009, 11, 10, 10, 45), u'text': u'and pretty easy too!',
    u'_id': ObjectId('4f2dcf0e856f1d27bd000002'), u'author': u'Eliot',
    u'title': u'MongoDB is fun'}</pre>
<p>Como fizemos com <a title="pymongo.collection.Collection.find_one" href="http://api.mongodb.org/python/current/api/pymongo/collection.html#pymongo.collection.Collection.find_one" target="_blank"><tt>find_one()</tt></a>, podemos filtrar os resultados com <a title="pymongo.collection.Collection.find" href="http://api.mongodb.org/python/current/api/pymongo/collection.html#pymongo.collection.Collection.find" target="_blank"><tt>find()</tt></a>:</p>
<pre class="brush:py">&gt;&gt;&gt; for post in posts.find({"author": "Mike"}):
...     post
...
{u'date': datetime.datetime(2012, 2, 4, 23, 6, 3, 554000), u'text': u'My first blog post!',
    u'_id': ObjectId('4f2dbb9c856f1d27bd000000'), u'author': u'Mike',
    u'tags': [u'mongodb', u'python', u'pymongo']}
{u'date': datetime.datetime(2009, 11, 12, 11, 14), u'text': u'Another post!',
    u'_id': ObjectId('4f2dcf0e856f1d27bd000001'), u'author': u'Mike',
    u'tags': [u'bulk', u'insert']}</pre>
<h2>Contando</h2>
<p>Se queremos apenas saber a quantidade de documentos podemos utilizar o método <a title="pymongo.cursor.Cursor.count" href="http://api.mongodb.org/python/current/api/pymongo/cursor.html#pymongo.cursor.Cursor.count" target="_blank"><tt>count()</tt></a>:</p>
<pre class="brush:py">&gt;&gt;&gt; posts.count()
3</pre>
<p>Podemos também aplicar  <tt>count()</tt> após uma filtragem:</p>
<pre class="brush:py">&gt;&gt;&gt; posts.find({"author": "Mike"}).count()
2</pre>
<h2>Consultas por intervalo</h2>
<p>MongoDB suporta diferentes tipos de <a href="http://www.mongodb.org/display/DOCS/Advanced+Queries" target="_blank">consultas avançadas</a>. Como exemplo, podemos realizar uma consulta que limita os resultados pelos <em>posts </em>com uma data menor que uma data específica, e com os resultados odenados pelo autor:</p>
<pre class="brush:py">&gt;&gt;&gt; d = datetime.datetime(2009, 11, 12, 12)
&gt;&gt;&gt; for post in posts.find({"date": {"$lt": d}}).sort("author"):
...     post
...
{u'date': datetime.datetime(2009, 11, 10, 10, 45), u'text': u'and pretty easy too!',
    u'_id': ObjectId('4f2dcf0e856f1d27bd000002'), u'author': u'Eliot',
    u'title': u'MongoDB is fun'}
{u'date': datetime.datetime(2009, 11, 12, 11, 14), u'text': u'Another post!',
    u'_id': ObjectId('4f2dcf0e856f1d27bd000001'), u'author': u'Mike',
    u'tags': [u'bulk', u'insert']}</pre>
<p>Aqui foi utilizado o operador especial <tt>"$lt"</tt> e também uma chamada a <a title="pymongo.cursor.Cursor.sort" href="http://api.mongodb.org/python/current/api/pymongo/cursor.html#pymongo.cursor.Cursor.sort" target="_blank"><tt>sort()</tt></a> para ordenar os resultados pelo autor.</p>
<h2>Indexação</h2>
<p>Para tornar a consulta anterior mais rápida podemos criar um <em>compound index</em> (índice composto) em <tt>"date"</tt> e <tt>"author"</tt>. Para começar, vamos utilizar o método <a title="pymongo.cursor.Cursor.explain" href="http://api.mongodb.org/python/current/api/pymongo/cursor.html#pymongo.cursor.Cursor.explain" target="_blank"><tt>explain()</tt></a> para obter algumas informações sobre como a consulta está sendo realizada sem o índice:</p>
<pre class="brush:py">&gt;&gt;&gt; posts.find({"date": {"$lt": d}}).sort("author").explain()["cursor"]
u'BasicCursor'
&gt;&gt;&gt; posts.find({"date": {"$lt": d}}).sort("author").explain()["nscanned"]
3</pre>
<p>Podemos ver que a consulta utilizou <em>BasicCursor</em> e passou por todos os 3 documentos da coleção. Vamos adicionar o índice e depois obter a mesma informação:</p>
<pre class="brush:py">&gt;&gt;&gt; from pymongo import ASCENDING, DESCENDING
&gt;&gt;&gt; posts.create_index([("date", DESCENDING), ("author", ASCENDING)])
u'date_-1_author_1'
&gt;&gt;&gt; posts.find({"date": {"$lt": d}}).sort("author").explain()["cursor"]
u'BtreeCursor date_-1_author_1'
&gt;&gt;&gt; posts.find({"date": {"$lt": d}}).sort("author").explain()["nscanned"]
2</pre>
<p>Agora a consulta está utilizando um <em>BtreeCursor</em> (índice) e passando apenas por 2 documentos. Em bancos muito maiores que esse, isso fará bastante diferença <img src='http://ivanneto.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Por fim, fechamos a conexão:</p>
<pre class="brush:py">&gt;&gt;&gt; connection.close()</pre>
<p>Mais informações sobre PyMongo podem ser vistas <a href="http://api.mongodb.org/python/current/index.html" target="_blank">aqui</a> e a documentação do MongoDB <a href="http://www.mongodb.org/display/DOCS/Home" target="_blank">aqui</a>. Mais exemplos podem ser vistos <a href="http://api.mongodb.org/python/current/examples/index.html" target="_blank">aqui</a>.</p>
<p>Este <em>post </em>é resultado da tradução e adaptação de:</p>
<ul>
<li><a href="http://blog.pythonisito.com/2012/01/getting-started-with-mongodb-and-python.html" target="_blank">http://blog.pythonisito.com/2012/01/getting-started-with-mongodb-and-python.html</a></li>
<li><a href="http://api.mongodb.org/python/current/tutorial.html" target="_blank">http://api.mongodb.org/python/current/tutorial.html</a></li>
</ul>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fivanneto.com.br%2F2012%2F02%2F05%2Fcomecando-com-python-e-mongodb%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>]]></content:encoded>
			<wfw:commentRss>http://ivanneto.com.br/2012/02/05/comecando-com-python-e-mongodb/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mudando a resolução do Windows com Python</title>
		<link>http://ivanneto.com.br/2012/01/21/mudando-a-resolucao-do-windows-com-python/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mudando-a-resolucao-do-windows-com-python</link>
		<comments>http://ivanneto.com.br/2012/01/21/mudando-a-resolucao-do-windows-com-python/#comments</comments>
		<pubDate>Sat, 21 Jan 2012 21:21:40 +0000</pubDate>
		<dc:creator>ivan</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://ivanneto.com.br/?p=19</guid>
		<description><![CDATA[O Python for Windows oferece suporte a várias operações no Windows usando Python. Hoje tive uma demanda de mudar a resolução &#8220;programatically&#8221;, e a solução foi o seguinte código: import os, sys import win32api import win32con import pywintypes Primeiro é preciso importar as libs necessárias. display_modes = {} n = 0 while True: try: devmode [...]]]></description>
			<content:encoded><![CDATA[<p>O <a title="Python for Windows" href="http://sourceforge.net/projects/pywin32/" target="_blank">Python for Windows</a> oferece suporte a várias operações no Windows usando Python. Hoje tive uma demanda de mudar a resolução <em>&#8220;programatically&#8221;</em>, e a solução foi o seguinte código:</p>
<pre class="brush:py">import os, sys

import win32api
import win32con
import pywintypes</pre>
<p>Primeiro é preciso importar as <em>libs</em> necessárias.</p>
<pre class="brush:py">display_modes = {}
n = 0
while True:
  try:
    devmode = win32api.EnumDisplaySettings(None, n)
  except pywintypes.error:
    break
  else:
    key = (
      devmode.BitsPerPel,
      devmode.PelsWidth,
      devmode.PelsHeight,
      devmode.DisplayFrequency
    )
    display_modes[key] = devmode
    n += 1</pre>
<p>No fim da execução do código acima, você tem <code>display_modes</code> como um dicionário contendo as possibilidades de resolução e frequência do monitor do seu sistema. Você pode imprimi-lo:</p>
<pre class="brush:applescript">for item in display_modes.items():
    print item</pre>
<p>O resultado é algo como:</p>
<pre class="brush:py">((32L, 1024L, 768L, 60L), &lt;PyDEVMODEA object at 0x00E03328&gt;)
((32L, 3200L, 1200L, 60L), &lt;PyDEVMODEA object at 0x00E03F58&gt;)
((32L, 2560L, 1024L, 60L), &lt;PyDEVMODEA object at 0x00E03BB0&gt;)
((24L, 1400L, 1050L, 60L), &lt;PyDEVMODEA object at 0x00E026F8&gt;)
((24L, 1280L, 1024L, 60L), &lt;PyDEVMODEA object at 0x00E025C0&gt;)
((16L, 3200L, 1200L, 60L), &lt;PyDEVMODEA object at 0x00E01D38&gt;)
((24L, 6400L, 1200L, 60L), &lt;PyDEVMODEA object at 0x00E030B8&gt;)
((24L, 800L, 600L, 60L), &lt;PyDEVMODEA object at 0x00E07A60&gt;)
((8L, 1920L, 1440L, 60L), &lt;PyDEVMODEA object at 0x00E00140&gt;)
((4L, 800L, 600L, 1L), &lt;PyDEVMODEA object at 0x00E04438&gt;)
((16L, 640L, 480L, 60L), &lt;PyDEVMODEA object at 0x00E009C8&gt;)</pre>
<p>Você pode testar se a resolução desejada está no dicionário, e então escolhê-la:</p>
<pre class="brush:applescript">desired_res = (32, 800, 600, 60)
if desired_res in display_modes:
    devmode = display_modes[desired_res]
    win32api.ChangeDisplaySettings(devmode, 0)</pre>
<p>That&#8217;s it! <img src='http://ivanneto.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>&nbsp;</p>
<p>Fontes: <a href="http://mail.python.org/pipermail/tutor/2006-November/051106.html" target="_blank">http://mail.python.org/pipermail/tutor/2006-November/051106.html</a>, <a href="http://bytes.com/topic/python/answers/660265-how-change-display-screen-resolution-800x600" target="_blank">http://bytes.com/topic/python/answers/660265-how-change-display-screen-resolution-800&#215;600</a></p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fivanneto.com.br%2F2012%2F01%2F21%2Fmudando-a-resolucao-do-windows-com-python%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>]]></content:encoded>
			<wfw:commentRss>http://ivanneto.com.br/2012/01/21/mudando-a-resolucao-do-windows-com-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

