Re: [python] XML a XSLT transformace & Python

2007-09-17 Thread Jan Martinek
Martin Stiborský wrote:
> Díky za nakopnutí k StringIO. Už mi to funguje.
> 

Je ten stringIO potřeba? Nešlo by to nějak takhle?

 >>> from xml.etree.ElementTree import *
 >>> text = ' NECO '
 >>> e = XML(text)
 >>> e.text
' NECO '
 >>> e.tag
'xml'
 >>> e.attrib
{'ble': 'bla'}
 >>>


Použil jsem funkci XML(), což je totéž co fromstring():

 >>> XML is fromstring
True

--
Jan Martinek
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] Jak udělat odpočítávání?

2007-09-13 Thread Jan Martinek
Mazlík wrote:
> Ahoj :-)
> 
> Potřebuju udělat script, kde by hned na začátku byl raw_input a
> odpočítávání. Např:
> 
> rozcestik = raw_input()
> ---
> Napište číslo podle nabídky a stiskněte ENTER
> (1) Start
> (2) Konfigurace
> (3) Napoveda
> (4) Konec
> ---
> 
> A teď chci, aby uživatel měl na tuto volbu např: 10 vteřin a pokud nic
> neudělá, tak se do proměnné "rozcestik" vloží hodnota třeba "1" (Jako
> kdyby místo něj napsal třeba jedničku a enter :-))
> 
> Pak mě napadla druhá varianta, že pokud by se script / program spustil
> s určitým argumentem, tak by ta nabídka volby vůbec nebyla a proměnné
> by se hodnota přiřadila sama. Jenže já pak potřebuju udělat .exe
> (py2exe) a nejsem si jistý, jestli by toto argumenty fungovali na
> 100pro a hlavně je to otrava psát parametry pro spuštění :)
> 
> Mockrát dík :-)
> 

Zaprvé píšu s křížkem po funuse a zadruhé tohle řešení bude fungovat jen 
na operačních systémech, což už poznamenal regnarG. Takže si toho 
nevšímejte :-)

#!/usr/bin/python

import sys, select
r = select.select([sys.stdin], [], [], 5)
if r[0]:
     choice = sys.stdin.readline()
else:
 choice = 'default\n'
print 'Tvoje volba:', choice

--
Jan Martinek
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] subprocess

2007-08-24 Thread Jan Martinek
Ahoj,

jakým způsobem by se to dalo zreprodukovat? Výjimku se mi nedaří 
vyvolat, ani když periodicky zkouším pouštět 'sleep' s různými čekacími 
dobami:

#!/usr/bin/python
import subprocess, random
while True:
 t = str(random.randint(1, 5))
 print t
 process = subprocess.Popen(['sleep', t])
 retvalue = process.wait()

Ani když vytvořím binárku, která by měla běžet co nejkratší dobu, tj.

#include
int main(void){
 return 0;
}

a pak ji zkouším neustále spouštět

#!/usr/bin/python
import subprocess
while True:
 process = subprocess.Popen(['./pokus'])
 retvalue = process.wait()

tak výjimku nedostanu. Může to záviset na platformě?

--
Jan Martinek

Šponar Josef wrote:
> Skript ověřuje zda jsou splněny podmínky pro spuštění externích programů. 
> Když jsou splněny podmínky, pokusí se vytvořit nový proces a testuje 
> návratovou hodnotu.
> 
> V případě, že  externí program běží více než cca.5sekund, tak je vše v 
> pořádku. Ale může se stát, že program  běží kratší dobu a "někdy" to projde v 
> pořádku a "někdy" to skončí popisovanou chybou.
> Zkoušel jsem i popen2, výsledek stejný.
> 
> Používam takovouto konstrukci:
> try:
>process = subprocess.Popen([prog_name])
>retvalue = process.wait() 
>if retvalue:
>  print 'program se sice povedlo pustit, ale neco selhalo'
>else:
>  print 'vse OK'
> except OSError, error:
>print 'nepovedlo se ho pustit'
>print error
> 
> 
>  
> 
> -Original Message-
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Petr Nesládek
> Sent: Thursday, August 23, 2007 11:42 PM
> To: Konference PyCZ
> Subject: Re: [python] subprocess
> 
> 
>>  Původní zpráva 
>> Od: Šponar Josef <[EMAIL PROTECTED]>
>> Předmět: [python] subprocess
>> Datum: 23.8.2007 13:18:06
>> 
>>
>> Ahoj, nevíte někdo jak odstranit tuto podivnost při používání 
>> subprocess.wait().
>> PYTHON = 2.4
>> System = SunOS
>>
>> prog=SUB.Popen(cmd, stderr=SUB.PIPE, stdout=SUB.PIPE)
>> retval=prog.wait()
>>
>> Traceback (most recent call last):
>>   File "av_rizeni.py", line 283, in ?
>> main()
>>   File "av_rizeni.py", line 180, in main
>> retval=prog.wait()
>>   File "/usr/local/lib/python2.4/subprocess.py", line 1007, in wait
>> pid, sts = os.waitpid(self.pid, 0)
>> OSError: [Errno 10] No child processes 
>> ___
>> Python mailing list
>> Python@py.cz
>> http://www.py.cz/mailman/listinfo/python
>>
> 
> Ahoj, možná sezeptám hloupě, ale ten subproces  se rozběhne, nebo ne ?
> 
> Případně co se vůbec děje do momentu než zkončí chybou ?
> 
> Petr
> 
> 
> 
> ___
> Python mailing list
> Python@py.cz
> http://www.py.cz/mailman/listinfo/python
> ___
> Python mailing list
> Python@py.cz
> http://www.py.cz/mailman/listinfo/python
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] Jak se typicky zjistuje, jestli soubor existuje?

2007-08-01 Thread Jan Martinek
Ondrej Beran wrote:
> 1.8.07, Jan Martinek <[EMAIL PROTECTED]>:
> 
>> jestliže soubor existuje, tak za zlomek sekundy už to nemusí být pravda.
>> Ve většině případů se proto existence souboru nezjišťuje, ale prostě se
>> zkusí nějaká operace a když vyhodí výjimku, něco se nepovedlo.
> 
> To je sice pravda, nebo si ho muze otevrit neco jineho s nejakym denny 
> narokem.
> 
> Ale ja to potrebuju pro vyhledani cesty k souboru, jehoz jmeno pak
> predam dalsimu kusu softu ke zpracovani, do ktereho nemam moznost
> zabudovat backtracking, aby si to prohledal sam.

Tak v tom případě sis vlastně odpověděl sám hned na začátku, tedy 
os.path.isfile().

Jestli tu informaci potřebuješ kvůli backtrackingu, tak se koukni, jak 
je implementovaná funkce os.walk(). No a jestli programuješ něco 
zajímavého, tak napiš _podrobně_ co to bude a jistě se tu sejde spousta 
nápadů, protože je okurková sezóna a je houby co dělat.
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] Jak se typicky zjistuje, jestli soubor existuje?

2007-08-01 Thread Jan Martinek
Ahoj

jestliže soubor existuje, tak za zlomek sekundy už to nemusí být pravda. 
Ve většině případů se proto existence souboru nezjišťuje, ale prostě se 
zkusí nějaká operace a když vyhodí výjimku, něco se nepovedlo.

Pro inspiraci se podívej, jak je implementovaná funkce os.path.exists()

def exists(path):
 """Test whether a path exists.  Returns False for broken symbolic 
links"""
 try:
 st = os.stat(path)
 except os.error:
 return False
 return True

Podobně například os.path.isfile():

def isfile(path):
 """Test whether a path is a regular file"""
 try:
 st = os.stat(path)
 except os.error:
 return False
 return stat.S_ISREG(st.st_mode)

Je vidět, že obě funkce volají os.stat(). Zdroják k os.access teď nějak 
nemůžu najít.

--
Jan Martinek

Ondrej Beran wrote:
> Ahoj vsichni,
> 
> nalezl jsem nekolik zpusobu, jak se da zjistit, zda soubor existuje:
> 
> os.stat()
> os.access()
> os.path.exists()
> os.path.isfile()
> 
> Co se nejcasteji pouziva? Nejjednodussi mi prijde isfile(), ale zrejme
> nejspravnejsi bude access().
> 
> Nebo se mylim?
> ___
> Python mailing list
> Python@py.cz
> http://www.py.cz/mailman/listinfo/python
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] ctypes, globální proměnná v kni hovně

2007-07-23 Thread Jan Martinek
Už asi vím. Tohle funguje:

 >>> from ctypes import *
 >>> lib = CDLL('./testlib.so')
 >>> c_int.in_dll(lib, 'a')
c_long(1243)
 >>> c_int.in_dll(lib, 'a').value = 5678
 >>> c_int.in_dll(lib, 'a')
c_long(5678)

--
Jan Martinek

Jan Martinek wrote:
> Ahoj,
> 
> mám soubor "testlib.c", který obsahuje jediný řádek, a to
> 
> int a = 1243;
> 
> Z toho udělám sdílenou knihovnu
> gcc -shared testlib.c -o testlib.so
> 
> natáhnu ji do pythonu pomocí ctypes
> 
>  >>> from ctypes import *
>  >>> lib = CDLL('./testlib.so')
>  >>> lib.a
> <_FuncPtr object at 0xb7f3d7e4>
> 
> což se zřejmě úspěšně podaří, ale vůbec netuším, jakým způsobem se 
> dostat k té hodnotě 1243. Nevíte to někdo?
> Když mám v té knihovně nějaké funkce, tak s jejich voláním nemám 
> problém, ale nevím, jakým způsobem přečíst a změnit globální proměnnou.
> 
> Díky
> Jan Martinek
> ___
> Python mailing list
> Python@py.cz
> http://www.py.cz/mailman/listinfo/python
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] ctypes, globální proměnná v kni hovně

2007-07-23 Thread Jan Martinek
dir() mi vypíše tohle:

['__call__', '__class__', '__ctypes_from_outparam__', '__delattr__', 
'__dict__', '__doc__', '__getattribute__', '__hash__', '__init__', 
'__module__', '__name__', '__new__', '__reduce__', '__reduce_ex__', 
'__repr__', '__setattr__', '__str__', '__weakref__', '_b_base_', 
'_b_needsfree_', '_flags_', '_objects', '_restype_', 'argtypes', 
'errcheck', 'restype']

Ostatně, lepší příklad na vyzkoušení než ten, který jsem prve napsal je

lib = CDLL('libc.so.6')

a jak teď třeba získat hodnotu errno?

 >>> lib.errno
<_FuncPtr object at 0xb7f667e4>

--
Jan Martinek

rajcze wrote:
> Ahoj,
> 
> co ti vrati vypis
> 
>>>> dir(lib.a)
> 
> ?
> 
> On 7/23/07, Jan Martinek <[EMAIL PROTECTED]> wrote:
>> Ahoj,
>>
>> mám soubor "testlib.c", který obsahuje jediný řádek, a to
>>
>> int a = 1243;
>>
>> Z toho udělám sdílenou knihovnu
>> gcc -shared testlib.c -o testlib.so
>>
>> natáhnu ji do pythonu pomocí ctypes
>>
>>  >>> from ctypes import *
>>  >>> lib = CDLL('./testlib.so')
>>  >>> lib.a
>> <_FuncPtr object at 0xb7f3d7e4>
>>
>> což se zřejmě úspěšně podaří, ale vůbec netuším, jakým způsobem se
>> dostat k té hodnotě 1243. Nevíte to někdo?
>> Když mám v té knihovně nějaké funkce, tak s jejich voláním nemám
>> problém, ale nevím, jakým způsobem přečíst a změnit globální proměnnou.
>>
>> Díky
>> Jan Martinek
>> ___
>> Python mailing list
>> Python@py.cz
>> http://www.py.cz/mailman/listinfo/python
>>
> 
> 
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


[python] ctypes, globální proměnná v kni hovně

2007-07-23 Thread Jan Martinek
Ahoj,

mám soubor "testlib.c", který obsahuje jediný řádek, a to

int a = 1243;

Z toho udělám sdílenou knihovnu
gcc -shared testlib.c -o testlib.so

natáhnu ji do pythonu pomocí ctypes

 >>> from ctypes import *
 >>> lib = CDLL('./testlib.so')
 >>> lib.a
<_FuncPtr object at 0xb7f3d7e4>

což se zřejmě úspěšně podaří, ale vůbec netuším, jakým způsobem se 
dostat k té hodnotě 1243. Nevíte to někdo?
Když mám v té knihovně nějaké funkce, tak s jejich voláním nemám 
problém, ale nevím, jakým způsobem přečíst a změnit globální proměnnou.

Díky
Jan Martinek
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] [pygtk] Global grab

2007-06-29 Thread Jan Martinek
regnarG wrote:
> Mám následující problém, který se mi nepodařilo vyřešit ani po půlhodině
> googlování. Potřebuji v PyGtk provést globální grab, tj. omezit veškerý
> vstup kláves v rámci systému na jedno okno, jako to dělá např.
> XScreenSaver nebo gksu. Zkoušel jsem  gtk.gdk.keyboard_grab(w.window, 1,
> 0), ale bezúspěšně. Existuje nějaké řešení ?
> 

Zkus tohle (program bych nazval "napínavých deset sekund"):

#!/usr/bin/python
import gtk, gobject

def konec(entry):
 gtk.gdk.keyboard_ungrab()
 gtk.main_quit()

e = gtk.Entry()
e.show()
w = gtk.Window()
w.add(e)
w.show()
w.connect('destroy', gtk.main_quit)
def_win = gtk.gdk.get_default_root_window()
gtk.gdk.keyboard_grab(def_win, True)
gobject.timeout_add(1, konec, e)
gtk.main()

Nevím proč, ale neukazuje se kurzor.
A když jsem si s tím hrál, tak jsem si dvakrát omylem zablokoval 
klávesnici a musel restartovat Xka.

--
Jan Martinek
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] Posílání emailů

2007-06-28 Thread Jan Martinek
[EMAIL PROTECTED] wrote:
> Dobrý den
> poradil byste mi někdo jak posílat maily pomocí pythonu?
> 
> ___
> Python mailing list
> Python@py.cz
> http://www.py.cz/mailman/listinfo/python

Ahoj,

tady jsem to už někomu psal:

http://www.abclinuxu.cz/forum/show/128223#7

Uvedené řešení jsem od té doby mockrát reálně použil.

--
Jan Martinek
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] cteni odpovedi programu ze stdin

2007-05-21 Thread Jan Martinek
Karel Šrot wrote:
> To Jan Martinek:
> Nemyslel. :-) Tebou uvadeny priklad totiz posle data pouze jednou, pote 
> zavre vstup a precte cely vystup. Toto neni interaktivni komunikace.

Aha. V tom případě se podívej do zdrojáku modulu subprocess do metody 
communicate. Ta metoda by se asi dala použít přímo, kdyby na konci vždy 
nečekala na ukončení procesu (self.wait()), což ty nechceš.

Abych pravdu řekl, to čekání na ukončení procesu považuju za nešťastný 
nápad. Kdyby to tam nebylo, bylo by to flexibilnější.

--
Jan Martinek
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] cteni odpovedi programu ze stdin

2007-05-21 Thread Jan Martinek
Karel Šrot wrote:
> Co se tyce modulu subprocess a select.select(), nikde jsem nenasel 
> priklad, ktery by ukazoval/vysvetloval to, co potrebuji. Muzete nekdo 
> znaly napsat kratky skript, ktery treba zavola "cat", bude na vstupu 
> nacte radek (raw_input), nahradi mezery novymi radky (to proto, aby tech 
> radku bylo vic, tj. nemeli jsme predstavu o jejich poctu), poslal to do 
> vstupu "catu", precetl odpoved z vystupu a vypsal ji na obrazovku. Atd., 
> porad dokola. 

Myslel jsi to takhle?

#!/usr/bin/python
# -*- coding:utf-8 -*-
import subprocess, sys

while True:
 line = sys.stdin.readline()
 if not line: break
 lines = line.replace(' ', '\n')
 process = subprocess.Popen('cat', stdin = subprocess.PIPE,
   stdout = subprocess.PIPE)
 process.stdin.write(lines)
 process.stdin.close()
 for line in process.stdout:
 sys.stdout.write(line) #Vypiš na terminál


> Jan Fuchs napsal(a):
>> Ahoj,
>> již mnohokrát zde proběhlo:
>>
>>   http://www.py.cz/pipermail/python/2007-March/005717.html
>>
>>   
>>   Tři z pěti pythonistů doporučují navždy zapomenout na
>>   
>>   os.system
>>   os.spawn*
>>   os.popen*
>>   popen2.*
>>   commands.*
>>   
>>   a použít raději modul subprocess, který nahrazuje (a doplňuje) všechny 
>>   výše uvedené metody.
>>   
>>
>>  S pozdravem Jan Fuchs
>>

Díky za citaci :-)
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] pravidla

2007-05-04 Thread Jan Martinek
Radek Machulka wrote:
> Dne pátek 04 května 2007 Petr Hodas napsal(a):
>> Cau Radku,
>> v příloze ti zasílám další změny a doplnění pravidel.
>>
>> Dále pak logo Kralovedvorska, ktere potřebujeme doplnit na hlavní stránku
>> vebu jako media partner. Logo bylo být aktivní. díky
> 
> Jasny,
> jen to "aktivni" logo znamena, ze po kliknuti se presmeruje na jejich stranku 
> (odkaz)? A jestli jo, tak na jakou (http://www.kralovedvorsko.cz ?). Ma se to 
> otevrit v novym okne nebo v tom samym (jsem pro v tom samym)? A jeste jedna 
> vec, asi nejdulezitejsi: kam to mam dat :) ??
> 
> P.S.: Soubory s tema logama jsou dva. JPG a PSD. To jsou oba stejny? Ja nemam 
> PhotoShop, takze ten druhej neotevru... Zatim tam hodim jen Jpeg a pak se 
> uvidi, jinak tyhle loga je asi fakt lepsi ve vektoru...:)))

Jasněže to otvírej v tom samým okně. Kdo chce nový okno, ten si klikne 
prostředním tlačítkem.

No a pak kdyžtak změň v odkazu webová kamera slovo "5-ti" na "pěti" a 
jinak je to fajn :-)
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] XML PARSER

2007-04-06 Thread Jan Martinek
[EMAIL PROTECTED] wrote:
> Dobry den,
> 
> jsem Pythoňátko které již tyden hledá nejake relevantni informace o
> zpracovani XML souboru v Pythonu. Jedna se mi o rozparsovani XML
> dokumentu do promenne , nejlepe slovniku , napr x = {} aby bylo mozne
> cist hodnoty nasledovne:
> 
>  hodnotaA = x['tagA']
>  hodnotaB = x['user']
> 
> Vzorovy XML:
> 
> 
> 
>   
>  Ahoj Světe
>   
>   
>   localhost
>   root
>   heslo
>   databaze
>   
> 
> 
> 
> Poradi mi nekdo, nejlepe malym vzorovym prikladem.
> 
> Predem dekuji za ochotu.
> 
> Hexim
> 

Mě to funguje, jestliže se vynechá ten "deklarační" řádek. Asi to není 
úplně košér, ale nevím, jak to udělat líp než takhle:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from elementtree.ElementTree import *
xml = '''

   
  Ahoj Světe
   
   
   localhost
 root
 heslo
 databaze
   

'''
rootelem = fromstring(xml)
queue = [rootelem]
while queue:
 elem = queue.pop()
 queue.extend(elem.getchildren())
 print elem.tag, elem.text
 for k, v in elem.attrib.iteritems():
 print k,v

Tohle projde celý XML strom, najde všechny tagy, jejich atributy (ve 
formě slovníku) a texty. Obvykle se na to asi používá rekurze, ale přes 
zásobník mi to přišlo lepší.
Užitečná metoda je taky getiterator() a spousta dalších.

Jan Martinek
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] V jakém jazyce je napsán modul "re "

2007-04-04 Thread Jan Martinek
Jan Kundrát wrote:
> Jan Martinek wrote:
>> Jak to tedy vlastně je?
> 
> Podivej se na importy v jednotlivych modulech (a dale pokracuj
> rekurzivne). Posleze dojdes az k modulu _sre a ejhle:
> 
>>>> import _sre
>>>> _sre
> 
> 
> Hezky vecer,
> -jkt
> 

Ahá! No jasně, máš pravdu. Já jsem si chtěl ušetřit práci a myslel jsem 
si, že to přechytračím. Pustil jsem python, natáhl modul "re" a vzápětí 
pustil
find /usr/lib64/python2.4/ -amin -1
abych se podíval, který modul se otvíral méně než před minutou. No a 
jaksi mi nedošlo, že to může být built-in ;-)
No a když jsem viděl _tolik_ pythonovského kódu v sre*, tak jsem se 
vyděsil, že je v tom napsaný celý modul. Díky.

Jan Martinek
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


[python] V jakém jazyce je napsán modul "re "

2007-04-03 Thread Jan Martinek
Zdravím,

zajímalo by mě, jestli je modul pro regulární výrazy "re" napsán v Céčku 
nebo v Pythonu. Většinou je možné se dočíst, že je napsaný v C, nicméně 
nejsem schopen najít odpovídající knihovnu. Asi se špatně dívám, ale 
re.py, sre.py, sre_compile.py, sre_constants.py a sre_parse.py jsou 
čistě v pythonu a nic binárního nenatahují.

Svou rychlostí (při jednoduché substituci) několikanásobně zaostává 
například za Perlem, což by tomu odpovídalo.

Naproti tomu, zastaralý a zavrhovaný (obsolete, deprecated) modul 
"regex" je nejspíš určitě psaný v C a zkompilovaný (na mém počítači) do
/usr/lib64/python2.4/lib-dynload/regex.so
a je výrazně rychlejší než novější modul "re".

Jak to tedy vlastně je?

Jan Martinek
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] Tiny ERP

2007-04-01 Thread Jan Martinek
mess wrote:
> No, je to dělané v pythonu a Gtk+
> 

Nějaká data z databáze by se dala zobrazit nejspíš pomocí TreeView. Pusť 
si pygtk-demo.py a koukni do sekce "Tree View" na ukázku ListStore. 
Jestli je to zhruba to co potřebuješ, podívej se do zdrojáku a taky si 
přečti tohle:

http://www.pygtk.org/pygtk2tutorial/ch-TreeViewWidget.html
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] subprocess

2007-04-01 Thread Jan Martinek
Vladislav Ludík wrote:
> Zdravím,
> 
> jak odeslat v linuxu příkaz pomocí subprocess.
> 
> V linuxu napíšu například:
> 
> server:~# sendsms "číslo"  "text"
> 
> a ten mi přes nainstalovanou SMS bránu odešle "text" na zadané "číslo"
> 
> Přes subprocess se mi to nedaří.
> 
> Díky za radu

import subprocess
cmd = ['sendsms', 'cislo', 'text']
process = subprocess.Popen(cmd)

a kdybys chtěl čekat na ukončení příkazu, tak ještě
process.wait()

Jo a je nutné to pouštět jako root?
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] editor pro Linux

2007-03-23 Thread Jan Martinek
Vladislav Ludík wrote:
> Pro editaci programů v Pythonu používám IDLE pod Windows. Soubor pak 
> natáhnu do Linux několikerým způsobem, kde pak pokračuji v jeho ladění. 
> Při kopírování dříve naprogramovaných a odladěných  částí do laděného 
> programu na Linuxu v Midnight Comander (MC) vznikají časové ztráty a 
> navíc MC není pro Python moc praktický.
> 
> Dotaz:
> 
> Může mi někdo doporučit vhodný editor pro Linux s podobnými vlastnostmi 
> jako IDLE pro Python?
> 

Jestli jsi dosud editoval soubory v mc, tak se pro tebe jistě 
alternativa najde, protože skoro cokoli je lepší. Zrovna nedávno jsem 
procházel dlouhý seznam editorů na

http://wiki.python.org/moin/PythonEditors

Vybíral jsem podle těchto kritérií:

- nějaká rozumná licence
- zda existuje balíček nějakém repozitáři - kvůli pohodlí a taky je to 
známkou určité vyspělosti
- vynechával jsem editory, co používají javu nebo nějaké úchylné 
grafické knihovny (třeba tk nebo wx)
- taby pro přepínání mezi otevřenými soubory
- vlastnosti uvedené zde http://www.py.cz/EditoryIDE pro kategorii "slušné"
- ať to není "moloch"

otestoval jsem asi sedm editorů a zakotvil u geany

http://geany.uvena.de//

nicméně existuje spousta dalších a mocnějších editorů, určitě si vybereš.
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] Jak udelat wait u popen.

2007-03-21 Thread Jan Martinek
> Pisu si scriptik kterej mi projde pomoci os.walk() zadany adresar se zalohama 
> a vsechny soubory se starsim datem nez pulnoc posledni soboty mi prekopiruje 
> na usb disky. Delam si tak offsite backup. A do dnes jsem to kopiroval 
> manualne, coz je pruda. :)

Tak to zkus napsat v čistém pythonu. Bude to přenositelné, hodně se tím 
naučíš, budeš mít pod kontrolou co se děje a troufám si říct, že to 
poběží rychleji.

> 
> Ve zkratce to jede zhruba takto:
> 
> #Vymaz vse na usb disku: 
> os.popen('rm -rfv /mnt/usb/*')

Typický příklad pro os.walk a parametrem topdown = False. Je potřeba 
rozlišit adresáře (které se mažou funkcí os.rmdir) a soubory + linky (ty 
se mažou os.remove).

> 
> #prekopiruj files
> For f in files: 
>   os.popen('cp -v f /mnt/usb/')
>   os.popen('rm -v f')
> 

Takže nejprve kopíruješ a pak mažeš? To lze nahradit jedinou funkcí 
os.rename().

> Samozrejme je kolem toho jeste spousta omacky ale tohle je kostra. A prave 
> potrebuji nejak cekat nez se mazani a kopirovani dokonci.

Aha, takže ani nepotřebuješ číst z roury, je to tak?

import subprocess
cmd = subprocess.Popen(['sleep', '5'])
cmd.wait()

> Mozna by to slo nejak resit pomoci copyfile z shutil, nevim.
> 
> 

Jojo, tam jsou docela užitečné věci.

Jan Martinek
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] Jak udelat wait u popen.

2007-03-20 Thread Jan Martinek
David Michal wrote:
> Zdravim,
> 
>  
> 
> Zapasim s pouzitim os.popen. Potreboval bych vzdy pockat na dokonceni
> subprocessu a pak teprve pracovat s jeho vystupem. V dokumentaci jsme
> nasel ze existuji tridy Popen3 a 4 ktere maji metodu wait(). Ale v
> modulu os je nemuzu najit. Jak si mam zadefinovat neco takoveho:
> 
>  
> 
> a = os.popen('echo ahoj')
> 
> a.wait()
> 
> print a[1].readlines()
> 
>  
> 
> ?
> 
>  
> 
> Diky,
> 
> David
> 

Tři z pěti pythonistů doporučují navždy zapomenout na

os.system
os.spawn*
os.popen*
popen2.*
commands.*

a použít raději modul subprocess, který nahrazuje (a doplňuje) všechny 
výše uvedené metody.
Můžeš zkusit to napsat takhle:

import subprocess
command = ['echo', 'ahoj']
echo = subprocess.Popen(command, stdout = subprocess.PIPE)
print echo.stdout.readlines()

Kdybys náhodou chtěl opravdu čekat na ukončení externího programu, tak k 
tomu slouží metoda wait, např.
echo.wait()
A vůbec - napiš přesně, čeho chceš dosáhnout a jaký externí program 
budeš pouštět. Třeba to ani nebude třeba :-)

Jan Martinek
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] lstrip

2007-02-19 Thread Jan Martinek
Jan Martinek wrote:
> Hynek Beran wrote:
>> Ahoj,
>> mám script, který používá různé parametry.
>> např.
>>
>> pyBackup.py --cfg=celyVyvoj.cfg
>>
>> ve scriptu mám :
>> cfgFile = sys.argv[1].lstrip('--cfg=')
>>
>> očekával jsem, že mi takto napsaný řádek vrátí název souboru  celyVyvoj.cfg .
>> Uřízne to --cfg=
>>
>> Ale ono mi to vrátí elyVyvoj.cfg (odmaže i c znázvu souboru). Když tam
>> zadám cokoli jiného do parametru , co nezačíná na c, tak to projde ...
>> Pochopil jsem špatně funkce ?
>>
>>
>> Díky za pomoc.
>>
>> --
>> Hynek BERAN
>>
> 
> Je to tím, že parametrem metody lstrip je řetězec obsahující seznam 
> znaků, které se mají uříznout. Např.
> 
>  >>> 'babalezekominem'.lstrip('ab')
> 'lezekominem'
> 
> Doporučuji tuto cestu opustit a použít modul OptionParser. Umí zacházet 
> s parametry, bere v úvahu jejich datové typy, je možné mu nastavit 
> defaultní hodnoty, vypisuje help a další užitečné věci, které by jinak 
> člověk musel dost složitě psát.
> 
> Jan Martinek

Ještě doplním ukázku:

import sys
from optparse import OptionParser

usage = "usage: %prog [--cfg configfile]"

parser = OptionParser(usage, version="%prog version 0.1")

parser.add_option("-c", "--cfg", action = "store", type = "string",
default = 'celyVyvoj.cfg', dest='cfgFile', help='Configuration file')

(options, args) = parser.parse_args()
print options.cfgFile


Zkus to pustit s parametrem --help a uvidíš sám.

Jan Martinek

P.S. Ta konference je nějaká pomalá - napsal jsem svůj příspěvek a až 
teprve potom se ukázalo, že jdu s křížkem po funuse ;-)
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] lstrip

2007-02-19 Thread Jan Martinek
Hynek Beran wrote:
> Ahoj,
> mám script, který používá různé parametry.
> např.
> 
> pyBackup.py --cfg=celyVyvoj.cfg
> 
> ve scriptu mám :
> cfgFile = sys.argv[1].lstrip('--cfg=')
> 
> očekával jsem, že mi takto napsaný řádek vrátí název souboru  celyVyvoj.cfg .
> Uřízne to --cfg=
> 
> Ale ono mi to vrátí elyVyvoj.cfg (odmaže i c znázvu souboru). Když tam
> zadám cokoli jiného do parametru , co nezačíná na c, tak to projde ...
> Pochopil jsem špatně funkce ?
> 
> 
> Díky za pomoc.
> 
> --
> Hynek BERAN
> 

Je to tím, že parametrem metody lstrip je řetězec obsahující seznam 
znaků, které se mají uříznout. Např.

 >>> 'babalezekominem'.lstrip('ab')
'lezekominem'

Doporučuji tuto cestu opustit a použít modul OptionParser. Umí zacházet 
s parametry, bere v úvahu jejich datové typy, je možné mu nastavit 
defaultní hodnoty, vypisuje help a další užitečné věci, které by jinak 
člověk musel dost složitě psát.

Jan Martinek
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] Return hodnoty pod ifem bez možnosti pr ojetí cyklem

2007-02-06 Thread Jan Martinek
Ahoj,

vždyť už jsi to skoro měl - stačilo ty výsledky appendovat do nějakého 
seznamu. Ale můžeš zkusit i ten yield nebo si třeba napiš malinkou 
třídu. A jde to i takhle:

 >>> barvy = ['cervena', 'modra', 'zelena']
 >>> data = [1,2,3,4,5]
 >>> B = len(barvy)
 >>> D = len(data)
 >>> [barvy[x % B] for x in range(D)]
['cervena', 'modra', 'zelena', 'cervena', 'modra']

funguje to pro libovolné množství barev :-)

Jan Martinek

[EMAIL PROTECTED] wrote:
> Vůbec se mi to nedaři vyřešit  :(
> ___
> Python mailing list
> Python@py.cz
> http://www.py.cz/mailman/listinfo/python
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] Na vsetko cyklus for ?

2006-11-15 Thread Jan Martinek
superman wrote:
>> line = f.readline()
>> while line != '':   # nebo taky while line:
>>  zpracuj(line)
>>  line = f.readline()
>>
>> Takhle je to opravdu správnější.
> 
> A nemáte pocit, že tohle je drbání se levou rukou za pravým uchem? Že 
> prostě dvakrát opisovat co chci (tedy v tomto případě line = 
> f.readline()) je prostě trochu neelegantní? Až ten výraz bude trochu 
> složitější, pak teprve vynikne neelegantnost tohoto řešení.
> 
> Miloslav Ponkrác

Aby se neduplikoval kód, tak v těchto situacích obvykle píšu

while True:
 line = f.readline()
 if not line: break
 zpracuj(line)

nebo třeba

while True:
 try:
 zpracuj(f.readline())
 except KonecSouboru:
 break


Zezačátku se mi to "while True" moc nelíbilo, ale zvykl jsem si. Je to 
způsob, jak napsat cyklus s podmínkou kdekoli.
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] Obsluha uživatelských chyb

2006-11-01 Thread Jan Martinek
Jakub Lucký wrote:
> Tak, a je tu můj premiérový lamerský dotaz
> 
> Mám jednoduchý kód
> 
> promenna =  input("zadej cislo:")
> 
> což mi v konzoli zobrazí normální dotaz, pokud ovšem místo čísel zadá
> dotyčný řetězec, vyhodí Python relativně ošklivý error...
> Nejde to nějak "pořešit" aby se místo toho dával třeba ValueError? napadají
> mě řešení přes Try/Except a Raise, ale nepodařilo se mi to zprovoznit
> 
> Děkuji za radu
> 
> Jakub
> 

Ahoj,

zkus tohle:

while True:
 try:
 promenna = int(raw_input("Zadej cislo "))
 break
 except ValueError:
 pass

print promenna


Raději bych se vyhýbal příkazu "input", protože mu jdou podstrčit různé 
věci - není moc bezpečný.
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] Zapis hexa cisla

2006-10-11 Thread Jan Martinek
> Ahoj,
> potreboval bych poradit se zapisem hexa cisla tak aby bylo v jednom 
> bytu(pri odeslani socketem) - tedka to zapisuji 
> ADDR=chr(0x00)+chr(0x00)+chr(0x90) (vystup ma 3 bytu), nekdy potrebuji 
> zapsat i delsi retezec a timto zpusobem je to dosti pracne
> 
> pb

Ahoj,

tohle by pomohlo?

import socket
ip = '255.255.255.224'
ip_n = socket.inet_aton(ip)

--
Jan Martinek
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


[python] pygtk, odchytávání událostí k lávesnice a myši

2006-08-20 Thread Jan Martinek
Ahoj, nevíte někdo, jak pomocí gtk zachytávat všechny události klávesnice a 
pohyby myší? Když napíšu tohle

#!/usr/bin/env python
import gtk

def wakeup(widget, event):
   print "Event number %d woke me up" % event.type

w = gtk.Window()

w.add_events(gtk.gdk.KEY_PRESS_MASK |
 gtk.gdk.POINTER_MOTION_MASK |
 gtk.gdk.BUTTON_PRESS_MASK |
 gtk.gdk.SCROLL_MASK)

w.connect("motion-notify-event", wakeup)
w.connect("key-press-event", wakeup)
w.connect("button-press-event", wakeup)
w.connect("scroll-event", wakeup)

w.show()

gtk.main()

Tak to na stisky kláves reaguje pouze tehdy, když je okno aplikace aktivní.  
A pohyby myši (a klikání) to zaregistruje jen když se kurzor myši nacházi 
uvnitř okna.
Jak by se to dalo napsat, aby to zachytávalo všechno i když je hlavní okno 
neaktivní/minimalizované/schované? Stačil by mi link na nějakou jednoduchou 
aplikaci, která toto musí umět, například
- blbinky, co měří vzdálenost, kterou urazil kurzor myši
- prográmek, co upozorní uživatele, že už píše příliš dlouho a měl by si 
  odpočinout
- něco, co zjišťuje aktivitu/neaktivitu uživatele (různí IM klienti)
- koulející oči, které se stále otáčejí za kurzorem myši (xeyes)
- keyloggers - zlomyslné programy (jsou-li nějaké), co čenichají všechny 
  stisky kláves (hesla) a schovávají je do souboru.
- ???

Hledám něco, co je napsáno v čistém gtk bez přímého volání xlib.
Díky 
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] ukončení interpretu, zničení ob jektu

2006-06-06 Thread Jan Martinek
Jan Martinek wrote:
> Zdravím,
> 
> narazil jsem na záhadné chování pythonu. Jestliže pustím tento program
> 
> class M:
>b = 0
>def __del__(self):
>  M.b
> 
> a = M()
> 
> Nestane vůbec nic zvláštního. Ale když změním poslední řádek na
> 
> a1 = M()
> 
> tak to vyhodí výjimku
> 
> Exception exceptions.AttributeError: "'NoneType' object has no attribute 
> 'b'" in  0x2ab50a28>> ignored
> 
> Není to podivné, že záleží na názvu proměnné?
> 

Ahoj,

poslal jsem to jako bugreport a zde je vyjádření vývojářů:

https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1500167&group_id=5470

--
On shutdown time, Python clears each module by replacing all
module entries with None. So at some point, it does
   a1 = None # or a1 = None
and at some other point, it does
   M = None
Depending on the order in which these happen, M might be
None (i.e. might not be class M anymore) when __del__ runs.

The order in which these happen depends on the order which
the names have in the module's dict. This, in turn,
depends
on the hash values of the strings, modulo the size of the
dictionary. Apparently, "a1" gets hashed after
"M", but "a"
gets hashed before "M".

This isn't really a bug, atleast not one that we plan to
fix. The order in which modules get emptied is unspecified,
and it can easily happen that things are gone when some
destructor runs. Classes should be written to be resistent
against this behaviour, e.g. by writing

   def __del__(self):
 self.__class__.b = 0 # name "M" might be gone
already

Closing this as "won't fix".

-

Závěr je, že se nejedná o chybu, tedy alespoň ne takovou, kterou je v 
plánu opravit. Doporučuje se používat self.__class__.

Děkuji všem za reakce. Zůstává mi ale pořád jedna nejasnost - jaktože to 
windowsářům tu výjimku nehází? Je tam jiné hashování+dict a je potřeba 
zvolit jiné názvy proměnných?

Jan Martinek
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] ukončení interpretu, zničení ob jektu

2006-06-04 Thread Jan Martinek
Jan Kundrát wrote:
> Jan Martinek wrote:
>> class M:
>>b = 10
>>def __init__(self):
>>  self.b += 1 # což není totéž co self.b.__add__(1)
>>def __del__(self):
>>  print self.b# Objekt instance
>>  print M.b   # Objekt třídy
>>
>> a1 = M()
>>
>>
>> by měl vypsat
>>
>> 11
>> 10
>>
>> ale místo toho napíše 11 a pak spadne. Tedy alespoň u mě ;-)
> 
> Nemel by spis vypsat 11 a 11?
> 


Doufám, že nežiju v nějakých bludech, ale podle mě to má opravdu vypsat
11
10
Například tento program

class M:
   b = 10
   def __init__(self):
 print self.b, M.b, id(self.b) == id(M.b)
 self.b = 11
 print self.b, M.b, id(self.b) == id(M.b)

a = M()

Vypíše

10 10 True
11 10 False

Jestliže se odkážu na self.b aniž bych ho předtím inicializoval, tak 
Python tento název nenajde. Nicméně pokračuje dál v prohledávání 
jmenného prostoru, až narazí na M.b. Takže se self.b a M.b jeví jako 
tytéž objekty. Ale jakmile do self.b přiřadím nějakou (jinou) referenci, 
najde se při volání self.b přednostně. A od té chvíle už self.b a M.b 
není totéž.
Pokud se ale pletu, tak mě prosím vyveďte z omylu.

--
Jan Martinek
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] ukončení interpretu, zničení ob jektu

2006-06-03 Thread Jan Martinek
> Dle meho skromneho nazoru M.b chybou je, ale z jineho duvodu.
> Dovolim si civotat Python reference manual:
> 
> Variables defined in the class definition are class variables; they are 
> shared by all instances. To define instance variables, they must be 
> given a value in the __init__() method or in another method. Both class 
> and instance variables are accessible through the notation 
> ``self.name'', and an instance variable hides a class variable with the 
> same name when accessed in this way.
> 
> Dulezita je veta "Jak tridni, tak i instancni promenne jsou pristupne 
> pomoci zapisu ''self.jmeno'' ...
> 
> Takze, kdyz zmenite M.b na self.b, docilite pozadovaneho efektu.
> 
> slacker
> 

Nemůžu změnit M.b na self.b především kvůli tomu, že bych pak nemohl 
demonstrovat to podivné chování v Pythonu ;-)

Nevím, jestli si rozumíme, ale odkaz na M.b určitě není nesprávný zápis, 
jedná se o objekt patřící ke třídě. Není to totéž co self.b, ačkoli se 
to tak zezačátku (kvůli prohledávání jmenných prostorů) může zdát. 
Například tento program

class M:
   b = 10
   def __init__(self):
 self.b += 1 # což není totéž co self.b.__add__(1)
   def __del__(self):
 print self.b# Objekt instance
 print M.b   # Objekt třídy

a1 = M()


by měl vypsat

11
10

ale místo toho napíše 11 a pak spadne. Tedy alespoň u mě ;-)

--
Jan Martinek
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] ukončení interpretu, zničení ob jektu

2006-06-03 Thread Jan Martinek
 >> tento program
>>
>> class M:
>>b = 0
>>def __del__(self):
>>  M.b
>>
>> a1 = M()
>>
>> vyhodí výjimku
>>
>> Exception exceptions.AttributeError: "'NoneType' object has no attribute
>> 'b'" in > 0x2ab50a28>> ignored
>>
> 
> rekl bych ze tam i tak mas chybu v M.__del__
> 

Jakou chybu? Jestli máš na mysli to
   M.b
tak se domnívám, že to chyba není. Ale nechci se o tom přít, protože i 
když ten řádek nahradím

   M.b = 0

tak to při ukončení programu taky vyhazuje tu výjimku.

Zjistil jsem další věc - když kód vepíšu do intepretu, tak při ukončení 
výjimku nevyhodí. Zatímco když vytvořím soubor s tímtéž kódem a ten 
spustím, tak to výjimku vyhodí. Děje se tak na Linuxu ve verzích
Pythonu 2.4.2 i 2.4.3.

--
Jan Martinek
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


[python] ukončení interpretu, zničení ob jektu

2006-06-02 Thread Jan Martinek
Zdravím,

narazil jsem na záhadné chování pythonu. Jestliže pustím tento program

class M:
   b = 0
   def __del__(self):
 M.b

a = M()

Nestane vůbec nic zvláštního. Ale když změním poslední řádek na

a1 = M()

tak to vyhodí výjimku

Exception exceptions.AttributeError: "'NoneType' object has no attribute 
'b'" in > ignored

Není to podivné, že záleží na názvu proměnné?

--
Jan Martinek
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] Mod_python a uchovani dat v operacni pameti

2006-03-29 Thread Jan Martinek
Pavel Reznicek wrote:
> Petr Mach wrote:
> 
>> Máte špatně nastavenu češtinu.
> 
> 
> Dekuji a omlouvam se. Nevim, jestli je zde preferovano nejake
> specificke kodovani cestiny a co je tedy "spatne nastavena" cestina,
> 

Obávám se, že jste píchl do vosího hnízda, protože máte špatně nastavený
svůj Microsoft Outlook Express 6.00.2800.1506, v hlavičce mailu 
neposíláte charset a říkáte, že "zde je něco preferováno". Je vcelku 
lhostejné, jaké použijete kódování, ale musí být v mailu uvedeno. Tím 
bych chtěl uzavřít toto off-topic intermezzo a přikládám váš původní 
(zajímavý!!!) mail v čitelné podobě (doufám).


Milí pythonýři,

pokouším se nyní spřátelit s mod_pythonem. Děláme webovou aplikaci, 
která má sbírat data od klientů a zpátky poskytovat aktuální stav.

Data se dají strukturovat jako slovník obsahující v klíčích řetězce a v
hodnotách seznamy či tuply čísel.

Původně jsme plánovali nějakého pythonového démona - bez mod_pythonu, 
který by data prostě uchovával v paměti, podle potřeby dost často 
aktualisoval (v řádu sekund) a také poskytoval. Aktualisace dat právě 
bude docela rychlá.

Tak - a o co jde: Myslel jsem si, že když mod_python běží pod Apachem, 
což je démon, bude si zaslaná data pamatovat. Opak je pravdou. Apache 
občas modul přeimportuje nebo co a data se vyprázdní.

Znamená to snad, že budeme nuceni uchovávat data v souboru či v 
databasi? Zatím jsem to udělal do souboru, ale bojím se, že se do disku 
na serveru časem prošoupe díra... :-)

Pavel Řezníček
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] windows: spousteni externich programu

2006-03-23 Thread Jan Martinek
Petr Vaněk wrote:
> Dne čtvrtek 23 březen 2006 15:20 Leos Pol napsal(a):
> 
>>Mozna jsem presne neporozumel problemu, ale na spousteni externich
>>binarek lze pouzit treba os.popen*.
>>
>>import os
>>fd = os.popen3('dot -Tpng -o %s.png' % fname)
>>fd[2].read()
> 
> 
> ajaj, tu jedinou radku v dokumentaci jsem prehledl. Jen abych se ujistil:
> * kdyz externi prog. sebehne v poradku, vsechno jede dal a v file 
> deskriptorech mam stdout, err atd.
> * kdyz ale shell prog. nenajde, popr. prg. spadne s chybou, nezjistim to 
> jinak, nez pochybnym parsovanim spolecneho vystupu ze stdout_stderr. Pochopil 
> jsem to dobre?
> 
> 

Opravdu se nechci vnucovat s tím modulem subprocess, ale ve srovnání s 
os.popen3 má jisté výhody:

- parametry předává jako "list", takže nevzniknou problémy s mezerami v 
názvu souboru atd.

- když nenajde binárku, tak způsobně vyhodí výjimku

Například tento program:

#!/usr/bin/env python
import subprocess, os

prog_name = 'false'
try:
   process = subprocess.Popen([prog_name])
   retvalue = process.wait()
   if retvalue:
 print 'program se sice povedlo pustit, ale neco selhalo'
   else:
 print 'vse OK'
except OSError, error:
   print 'nepovedlo se ho pustit'
   print error

otestuje všechny situace - jestli se program povedlo spustit a pokud 
ano, tak se ještě podívá na návratový kód.
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] windows: spousteni externich programu

2006-03-23 Thread Jan Martinek
Ahoj,

na spouštění externích programů vřele doporučuji modul subprocess.

http://www.python.org/dev/doc/devel/lib/module-subprocess.html

Měl by být součástí Pythonu od verze 2.4. Díky němu lze nahradit tyto 
moduly a funkce:

os.system
os.spawn*
os.popen*
popen2.*
commands.*

které byly každá pes jiná ves a subprocess celkem elegantně spojuje 
jejich vlastnosti. Binárku umí hledat i v $PATH. Zřejmě funguje i na 
windows.

Honza

Leos Pol wrote:
> Mozna jsem presne neporozumel problemu, ale na spousteni externich 
> binarek lze pouzit treba os.popen*.
> 
> import os
> fd = os.popen3('dot -Tpng -o %s.png' % fname)
> fd[2].read()
> 
> Doufam, ze jsem pomohl.
> Leo
> 
> Petr Vane(k wrote:
> 
>>zdar buh kristus vespolek.
>>
>>Resim takovy pikantni problemek. Muj skript dokaze potencialne vyuzit program 
>>treti strany, pokud je v systemu obsazen. Pochopitelne tento externi program 
>>muze byt nainstalovan kdekoli.
>>Na U*XU to resim nedbale elegantne. napr.:
>>retval = os.spawnlp(os.P_WAIT, 'dot', 'dot', '-Tpng', '-o', fname + '.png', f)
>>
>>coz mi zajisti, ze je-li 'dot' v $PATH, tak se spusti. A ted jadro civavy - 
>>os.span*p ve win neexistuji. Jak je obejdu nebo nahradim? Pouze pripominam, 
>>ze umisteni extreniho programu predem neznam. Ani prochazeni GB souborovych 
>>systemu mi neprijde dvakrat idealni.
>>
>>Ovsem, mohu udelat test na typ OS a uzivateli se vysmat, ale jde mi to tak 
>>nejak proti srsti...
>>
>>okult jogurt, satan banan!
>>petr
>>  
>>
>>
>>___
>>Python mailing list
>>Python@py.cz
>>http://www.py.cz/mailman/listinfo/python
> 
> 
> 
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] ioctl() v céčku funguje, v Pyth onu selže

2006-03-22 Thread Jan Martinek
Jan Martinek wrote:
> Ahoj,
> 
> když v Pythonu napíšu tohle,
> 
> import tty, os, fcntl
> fd = os.open('/dev/ttyS0', os.O_RDWR | os.O_SYNC)
> fcntl.ioctl(fd, tty.TIOCMBIC, tty.TIOCM_DTR)
> 
> tak to vyvolá výjimku
> IOError: [Errno 14] Bad address
> 

Aha, už vím. Musí se to předtím spakovat:

fcntl.ioctl(fd, tty.TIOCMBIC, struct.pack('I', tty.TIOCM_DTR))

(v Céčku se předává pointer). Spletl jsem si to s tímhle:

fcntl.ioctl(fd, tty.TIOCMIWAIT, tty.TIOCM_CTS)

což se naopak nepakuje, protože se v Céčku udávají přímo flagy, nikoli 
pointer na ně.
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


[python] ioctl() v céčku funguje, v Pyth onu selže

2006-03-21 Thread Jan Martinek
Ahoj,

když v Pythonu napíšu tohle,

import tty, os, fcntl
fd = os.open('/dev/ttyS0', os.O_RDWR | os.O_SYNC)
fcntl.ioctl(fd, tty.TIOCMBIC, tty.TIOCM_DTR)

tak to vyvolá výjimku
IOError: [Errno 14] Bad address

zatímco ekvivalentní program v C (puštěný na stejném stroji pod stejným 
uživatelem)

#include 
#include 
#include 
#include 

int main(int argc, char **argv) {
   int fd, r;
   int iFlags = TIOCM_DTR;

   fd = open("/dev/ttyS0",  O_RDWR | O_SYNC);
   if (fd == -1){
 perror("Failed to open port");
 return -1;
   }
   r = ioctl(fd, TIOCMBIC, &iFlags); /* Vynuluje DTR */
   if (r == -1){
 perror("TIOCMBIC failed");
 return -1;
   }
   close(fd);
   return 0;
}

funguje a žádnou chybu nevyhodí. Netušíte, v čem může být rozdíl?

Díky
johny
___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python


Re: [python] Referencia

2006-02-02 Thread Jan Martinek
On Thu, 2006-02-02 at 18:14 +0100, balky wrote:
> Zdravim,
> 
> pokial viem, tak ak do premennej priradim nieco, nepriradil som vlastne 
> obsah tej premennej, ale iba odkaz(pointer) na ten objekt.
> 
>  >>> a = [1,2,3]
>  >>> b = a
>  >>> print b
> [1,2,3]
>  >>> a = [3,3,3]
>  >>> print a
> [3,3,3]
>  >>> print b
> [1,2,3]
> 
> 
> Ako zabezpecim, aby sa pri zmene hodnoty a zmenila aj hodnota v b? Nie 
> je b iba odkaz na a? Alebo je to odkaz na ine a?
> 
> balky

Třeba takto:

>>> a = [1,2,3]
>>> b = a
>>> a[:] = [3,3,3]
>>> b
[3, 3, 3]

a nadále platí, že id(a) == id(b)

___
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python