Archive for the Windows Category

Python – Montando um share no windows (SAMBA)

Posted in Django, Programação, Python, Tecnologia, Windows with tags , , , on 13 de setembro de 2013 by fchevitarese

Opa!

Como prometi (desta vez fui rápido), vou criar um post rapidão de como mapear uma unidade de rede autenticada com SAMBA no Windows, para que você possa gravar e ler arquivos =D

Primeiro eu criei a função abaixo:


#@TODO --> Pegar usuário, senha e host das confs do database =D
def mappDisk(drive, ip, sharedFolder, user, password):
 # print "Entrei aqui =D "
 import pywintypes
 import win32com.client

# Disconnect previous mapped drives
 networkPath = win32com.client.Dispatch('Wscript.Network')
 network_drives = networkPath.EnumNetworkDrives()
 for mapped_drive in [network_drives.Item(i)
 for i in range(0, network_drives.Count() -1 , 2)
 if network_drives.Item(i)]:
 networkPath.RemoveNetworkDrive(mapped_drive, True, True)

# Mount the drives
('z:', '\\\\192.168.1.100\\Some_Share', 'someuser', 'somepass')]
 drive_mapping = [
#(drive, '\\\\'+ip+'\\'+sharedFolder, user, password),
 ]
 print drive_mapping
 for drive_letter, network_path, user_name, user_pass in drive_mapping:
 try:
 networkPath.MapNetworkDrive(drive_letter, network_path, True, user_name, user_pass)
 return True
 except Exception, err:
 print err
 return False

Aí é só chamar a função passando os parâmetros, testar se você pode gravar o arquivo e ser feliz !!!


try:
 file= open(caminho.mapDrive + '\\' + caminho.pastaPedido + '\\' + fileName, 'a')
 except IOError:
 canWrite = mappDisk(caminho.mapDrive, caminho.ipServidor, caminho.sharedFolder, caminho.usuario, caminho.senha)

if canWrite:

 file= open(caminho.mapDrive + '\\' + caminho.pastaPedido + '\\' + fileName, 'a')

...

Como estou  usando o Django, criei um models para guardar os parâmetros. Assim fica mais fácil visualizar, editar e tals ^^

Segue no dpaste porque o último post ficou todo zicado –> http://dpaste.com/hold/1379145/

Obs.:  Usa a biblioteca pywin32 ….

Abraços!

Gravar arquivos em share do samba autenticado

Posted in Django, Programação, Python, Tecnologia, Windows with tags , , , on 13 de setembro de 2013 by fchevitarese

Opa!!

Bom, alguns meses ou anos que eu não posto nada!

Eu sempre posto experiências que tive para resolver determinadas coisas e tals, por isso não estava postando quase nada, pois a maioria das coisas que eu andava fazendo era digamos, trivial =D

Eis que esta semana, me deparo com uma situação no mínimo inusitada!
Estou migrando um sistema em ASP para Django, e como não dou conta de migrar tudo de uma vez, estou fazendo de forma gradual, o que me obriga a rodar o Django com uma velha versão do apache + chiliasp e wsgi =D

Servidor windows e tals… Enfim, minha aplicação precisa realizar uma troca de arquivos, no caso, em uma pasta de um samba server que roda uma outra aplicação que não é minha que tem a função de ler este arquivo, coletar as informações e me devolver um arquivo de resposta.
Eu leio este arquivo de resposta, pego as informações e devolvo para a página… Simples né! Até eu que sou mais bobo acreditei que seria!

O problema já começou na hora de gravar os arquivos. Como eu (inocentemente) mapeei a unidade/pasta do share, já autenticando e tals, pensei que seria simplesmente gravar no z:\pasta\ =D

Ledo engano! Nem chegava a encontrar o caminho =D

Parti então para o ataque e encontrei uma biblioteca chamada pysmb que resolveria meu problema!

Então vai seguir aí como foi que eu fiz! ^^
Obs.: Não vou ensinar aqui nada relacionado ao Django ou a instalação do pacote ^^

Primeiro os imports …


from smb.SMBConnection import SMBConnection
from nmb.NetBIOS import NetBIOS
from smb.smb_constants import *

Feito os imports, criei uma funçãozinha para fazer o trabalho =D


def getBIOSName(remote_smb_ip, timeout=30):
srv_name=""
try:
bios = NetBIOS()
srv_name = bios.queryIPForName(remote_smb_ip, timeout=timeout)
except:
print >> sys.stderr, "Looking up timeout, check remote_smb_ip again!!"
finally:
bios.close()
 # print srv_name
return srv_name

def connectShare():
server_name = getBIOSName('192.168.0.151')[0]
client_name = ('webdevelopervm')
s = SMBConnection('meu_usuario', 'minhasenha', client_name, server_name, use_ntlm_v2 = True)
s.connect(server_name, 139)
if s.auth_result:
# print s.listShares()
# print s.listPath('Publico','pedidos', SMB_FILE_ATTRIBUTE_ARCHIVE)

f = open(r"c:\meutestenovo.txt", 'a')
f.write("Funciona fedaputa!!!")
f.close()
f = open(r"c:\meutestenovo.txt", 'r')

s.storeFile('Publico', r'pedidos\\meutestenovo.txt', f)
f.close()

É necessário pegar o nome do servidor onde está o share, por isto a função getBiosName() =D
A variável client_name deve conter exatamente o nome do seu computador =D
Tive que criar o arquivo, depois ler o arquivo para enviar ao servidor.

Ainda não testei, mas deve existir uma maneira de criar o arquivo em memória e então envia-lo.

Tem outra forma de fazer mapeando o local, mas vou fazer outro post para dar mais moral no blog né XD

Segue o link no dpaste se caso não ficar legal os fontes aqui no blog –> SMBShare

Você também pode efetuar a conexão de outra maneira, usando smb://

Acredito que funcione até no windows mas eu não cheguei a testar 😉

http://miketeo.net/wp/index.php/2012/05/04/smb-url-support-in-pysmb.html

Link de onde encontrei a primeira luz (quase toda na verdade =D )

 

Abraços!

 

 

Internet Explorer 9 – Rc :( :D

Posted in Inutilidades, Tecnologia, Windows with tags on 16 de fevereiro de 2011 by fchevitarese

Salve salve!!!

Bom, últimamente tenho trabalhado com algumas soluções web que tem  foco para usuários Windows (infelizmente) , e precisam de utilizar Internet Explorer… (ActiveX – I hate that!)

Bom, então, resolvi instalar o Internet Explorer 9 para ver o que mudou, se o que eu estava à desenvolver já funcionaria no “novo” navegador da Microsoft.

Então, minha primeira impressão (e a primeira é a que fica) não foi muito boa. Para definir com uma palavra, minha experiência com o IE9 foi péssima.

Bom, a instalação obviamente é tranquila né… Windows Installer pra lá, next next pra cá … Enfim, a mesma coisa de sempre.

Após instalado, demorou pakas pra abrir. Quando digito o endereço de algum site, a barra de status mostra que o site está sendo carregado… Nada na tela ainda além da tela branca.

Depois de um tempo, a barra de status mostra que o site foi carregado e, para minha surpresa, nada além da tela branca… Pensei… Bom, pode ter dado pau né 😛 (algo normal por sinal 😉 )

Então fechei, e repeti a operação… Mesmíssima coisa!!!

Só que ao passar com o mouse sobre a tela branca, ele identificava os links!! Wtf is happening?!

Bom. Não sei, não quero saber, mas sinceramente, não tenho raiva de quem sabe!

Utilizar o Internet Explorer 6, 7, 8 ou 9 pode ser uma questão de gosto (péssimo gosto por sinal), por comodidade, ou como no meu caso, necessidade.

Enfim, estou muito satisfeito com o Chrome, navegador que tomou o espaço que o Firefox ocupava no meu coração (ki bunitim!!! )

Viva a liberdade de escolha!!!

 

Abraços! 😉

LogRotate para Apache (on Windows) ;)

Posted in Programação, Python, Tecnologia, Windows with tags , , on 17 de maio de 2010 by fchevitarese

Opa!!!

Bom, criei este post para compartilhar um script que desenvolvi, para resolver um problema que eu venho tendo com alguns servidores rodando apache no Windows.

Os logs de acesso, erro etc, ficavam gigantes, e o apache ficava uma tartaruga. Arquivos com mais de 100 mb e o apache já agachava. Como não encontrei nada de “log rotate” para o Apache utilizando o Windows, resolvi fazer tal script parar resolver meu problema.

Depois de pronto, basta colocar no agendador de tarefas do Windows para executar diáriamente, ou conforme a sua demanda … Vamos por parte.  Primeiro vou explicar mais detalhadamente o problema ;)

Um servidor com Apache rodando no Windows. Seus arquivos de log chegaram a incrivelmente 20 GB. Com 300MB o apache já agacha… Portanto, o serviço tornou-se instável para não dizer que ele deixou de funcionar completamente.
O que eu precisava? Precisava de um serviço para fazer um logrotate como existe para Linux, porém, posso não ter procurado direito, mas não encontrei uma solução pronta para Windows.
Portanto, decidi fazer o script que é iniciado diáriamente pelo “Agendador de tarefas” do Windows, que vai lá na pastinha onde ficam os logs do Apache e verifica o tamanho dos arquivos de log. No meu caso, eu limitei a 10MB e está de bom tamanho pra mim 😉
Se encontrar arquivos de log que tenham mais de 10MB, ele para o serviço do Apache (o que é necessário pois enquanto o Apache funciona, os arquivos não podem ser editados), e compacta os arquivos encontrados em um arquivo “.tar.bz2” .
Depois de efetuar a compactação, ele apaga os arquivos “gigantes” e cria novos arquivos com o mesmo nome (necessários para o funcionamento do Apache) e inicia o serviço.

Bom, acho que o problema ficou bem explicado né 😉
Vale lembrar que estou falando de Apache, mas o trecho de código que utilizei para parar o serviço pode ser utilizado com qualquer serviço do Windows ok 😉

Então vamos lá… Vamos explicar as funções, e depois no fim do post, irei colocar o arquivo para download… Quem quiser me da R$ 10,00 obrigado porque as contas estão atrasadas 😉 – Brincadeira…

Primeiro os imports:

# -*- coding: utf-8 -*-
import os
import sys
import socket
import time
import datetime
import glob
import win32serviceutil
import tarfile
from stat import *

Agora, vamos as nossas variáveis:

tDate = datetime.datetime.now()
workDir = "C:\\Arquivos de programas\\Apache Group\\Apache2\\logs\\"
fileList = []
destinationfile = workDir + "BackupLogsApache-" + str(tDate.day) + "-" + str(tDate.month) + "-" + str(tDate.year) + ".tar.bz2"

MACHINE = socket.gethostname()
SERVICE = 'Apache2'

Explicando:
tDate, eu to pegando a data na hora que executo o scripts…
workDir é o diretório onde o script irá buscar pelos arquivos …
fileList é a lista onde serão adicionados os nomes dos arquivos maiores que 10MB
destinationfile é o nome do arquivo onde irei salvar os backups…
MACHINE é o nome do computador que está executando o script.
SERVICE é o serviço que iremos manipular 😉

Vamos agora a função que criamos para varrer o diretório:

def getFiles(workdir):
    for folder in glob.glob(workdir):
        for f in glob.glob(folder + "/*.log"):
            filesToRotate = getLogSize(f)
            print filesToRotate
        if filesToRotate:
            service_info('stop', MACHINE, SERVICE)
    compressFiles(filesToRotate, destinationfile)

Esta função busca pelos arquivos de log dentro da pasta especificada e chama a função “getLogSize(f)” passando o nome do arquivo como parâmetro para verificar o tamanho do mesmo. Se o arquivo for maior que 10MB, ele chama a função “service_info” com os parâmetros necessários para parar o serviço.
Depois chama a rotina de compressão dos arquivos…
Vamos ver a rotina de pegar o tamanho do arquivo :

def getLogSize(file_name):
    file_info = os.stat(file_name)
    tamanho = file_info[ST_SIZE]
    if tamanho > 10000:
        fileList.append(file_name)
        return fileList
    return fileList

Agora, a rotina para parar o serviço. O original pode ser encontrado aqui.

def service_info(action, machine, service):
    if action == 'stop':
        win32serviceutil.StopService(service, machine)
        print '%s stopped successfully' %service
    elif action == 'start':
        win32serviceutil.StartService(service) #find a bug in here... Already fixed 😉
        print '%s started successfully' %service
    elif action == 'restart':
        win32serviceutil.RestartService(service, machine)
        print '%s restarded successfully' %service
    elif action == 'status':
        if win32serviceutil.QueryServiceStatus(service, machine)[1] == 4:
            print '%s running normally' %service
        else:
            print '%s is NOT running' %service

Agora, a rotina para compactar os arquivos 😉

def compressFiles(file_list, destination_file):
    try:
        tar = tarfile.open(destination_file, "w:bz2")
        for f in file_list:
            tar.add(f, os.path.basename(f))
            os.remove(f)
            if createNewFile(os.path.basename(f)):
                print "Success !!! Rotation complete ;)"
       tar.close()
       service_info('start', MACHINE, SERVICE)
   except Exception, e:
       print "Ocorreu um erro - %s" %e

Explicando: Esta rotina compacta os arquivos encontrados, e após isto, remove os mesmo e chama a rotina para criar novamente os arquivos vazios. Depois, ela chama novamente a rotina que manipula os serviços para restartar o serviço especificado 😉
Vamos a rotina de criação do novo arquivo:

def createNewFile(file_name):
    try:
        fileHandle = open(workDir + file_name, "w")
        fileHandle.close
        return True
    except Exception, e:
        print e
        return False

Pronto! acabou nosso script.

Bom, futuramente, quero fazer umas verificações para confirmar se o serviço foi iniciado mesmo, e se não, ele disparar uma rotina que envia um e-mail avisando que não conseguiu iniciar o serviço.

Por enquanto é só! Sei que não sou ainda um computólogo, nem mesmo um super pythonista, portanto, várias rotinas e funções podem e devem ser melhoradas.

Para o que eu preciso, já está me atendendo 😉

Qualquer dúvida pergunta aí… Ops… O arquivo né… Segue o link abaixo 😉

Dependências:

pywin32

LINK

Abraços!

Linux – Vantagens do Linux sobre o Windows

Posted in Artigos interessantes ..., Linux, Tecnologia, Windows with tags , on 22 de janeiro de 2010 by fchevitarese

Opa!!!

Bom, estava eu lendo aqui como de costume um artigo, quando no final, vi outro artigo intitulado assim:

Vantagens do Linux sobre o Windows

Bom… Confesso que não sou lá muito fã deste tipo de artigos, até mesmo porque isto gera diversos “flames” e brigas desnecessárias que não levam a lugar algum.

Usar Windows, usar Linux… Isto tudo é uma questão primeiramente de gosto. Sim de gosto!

Se o cara gosta do Windows, mesmo que ele tenha uma “Cópia do original 😉“, então, ele realmente deve utilizar o Windows.
Se ele precisa de algum software específico que só funciona nesta plataforma, então, ele realmente deve utilizar o Windows… E por aí vai… É uma discussão intensa e por vezes acalorada, pois na maioria das vezes, as opiniões acerca deste assunto são opiniões de apaixonados por Linux, contra opiniões de quem acha o Windows a 8° maravilha do mundo.

Enfim, resolvi então ler o artigo e achei bastante interessante pois, o autor não fez o artigo com o intuito de diminuir, depreciar, caluniar ou emitir opiniões pessoais sobre Windows e Linux.

Ele limitou-se em comparar de uma forma bacana os dois sistemas, mostrando algumas, eu disse algumas vantagens da utilização do Linux vs a utilização do Windows.
Digo algumas pois, na minha opinião, existem diferentes pontos de vista com relação a vantagens e desvantagens. Algumas coisas que se faz com Windows, ainda são uma luta para fazer com Linux. Mas isto não me faz desistir de usá-lo, nem mesmo me faz desgostar dele 😉

Então, sem mais delongas,  pois eu já escrevi até demais, segue o link do post original…
Opiniões são bem vindas, mas flames serão deletados 😉

Link – http://ribafs.org/portal/colaboracoes/1-ribamar-fs/153-vantagens-do-linux-sobre-o-windows

Abraços!

Microsoft perde patente do Word …

Posted in Artigos interessantes ..., Inutilidades, Tecnologia, Windows with tags , on 5 de janeiro de 2010 by fchevitarese

SEATTLE – Um tribunal americano de apelações confirmou um veredicto do júri contra a Microsoft por infração de patente de uma pequena empresa de software canadense.

A gigante deverá pagar uma multa de 290 milhões de dólares e não poderá comercializar versões do Word que contem o programa relacionado com a patente.

A decisão pode sinalizar o final de uma longa disputa entre a Microsoft e a i4i, com sede em Toronto.

No dia 12 de agosto, um júri federal dos EUA decidiu um favor da i4i, acusando a Microsoft de desrespeitar uma patente relacionada com o uso de XML nas versões de 2003 e de 2007 do Word.

O júri chegou à conclusão de que a gigante deve pagar 290 milhões de dólares pelos prejuízos causados à i4i e o tribunal aceitou a solicitação da i4i para que a Microsoft seja proibida de vender versões do software que contenham a tecnologia.

A Microsoft não poderá mais comercializar esses produtos a partir do dia 11 de janeiro de 2010.

Entretanto, analistas da indústria acreditam que provavelmente haverá um acordo entre as empresas e a fabricante do Word pagará um royalty à i4i pela patente.

“A i4i está satisfeita com a decisão do tribunal, porque representa uma importante vitória dos direitos autorais dos pequenos inventores”, declarou em comunicado a companhia canadense.

Python – PyScripter (mais um editor)

Posted in Programação, Python, Tecnologia, Windows with tags , on 16 de dezembro de 2009 by fchevitarese

Opa!!!

Venho com mais uma dica, só que desta vez, é pra quem ainda utiliza Windows.

É o editor PyScripter.

A primeira vez que instalei-o em minha máquina virtual, não dei nada por ele. Mas depois de codificar algumas coisas em diferentes editores e nele, pude ver que ele é bem legal.

Contando com uma interface ao qual podemos dizer que é até bonitinha (parece com o office ou algo do tipo), utilizando-o, você tem várias opções.

Ao instala-lo, você verá que ele tem um editor para cada versão de Python. Bom, pelo menos foi o que eu entendi.
Não sei muito bem porque mas, isso já são outros quinhentos 😉

Depois que você abrir o editor vai ver que ele tem várias opções bacanas como:

Gerenciamento de projetos:

Lista de variáveis, “watch list “, “Breakpoints” (isso mesmo, breakpoints), “Mensagens”, e Interpretador.

Você pode colocar seus breakpoints no código, e rodar no modo “Debug”. Você poderá ver os valores que suas variáveis estão recebendo tudo belezinha, como no Delphi e outros.

Bom acho que é isso… Agora é você instalar e testar por sua conta e risco !!!

Abraços!