Nejasnosti okolo exec – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Nejasnosti okolo exec – Python – Fórum – Programujte.comNejasnosti okolo exec – Python – Fórum – Programujte.com

 

Jeffery
~ Anonymní uživatel
6 příspěvků
7. 3. 2009   #1
-
0
-

ahoj. mam takovy problem a nejasnost ohledne "exec". docetl jsem se, ze kdyz spustim napriklad:

p="print 3"
exec(p)

exec otevre vlastni interpreter a v nem provede "print 3". jenze, ja exec podezrivam z toho, ze tento otevreny interpreter uz v nejakych pripadech nezavre. napsal jsem program, ve kterem se v prakticky nekonecnem cyklu spousteji nove a nove prikazy prave pomoci exec a pri tomto deni se neunosne zvecuje strankovaci soubor, az do chvile nez pretece a program se ukonci chybou neco jako "errormemory". je mozne ze toto neni stoprocentne podmineno exec, ale necim jinym jenze ja uz nevim cim. takze se chci zeptat na par konkretnich otezek jakozto naprosty zacatecnik.

a) je mozne ze exec nezavira sve spustene interpretery v nejakych pripadech? - pokud ano jak ho k tomu donutit?

b) je mozne ze exec zavira sve interpretery, ale nejakym zpusobem si v pameti uchovava jejich promenne? - pokud ano jak je mam hromadne smazat tak, aniz bych vymazani promennych musel uvadet na konec retezce ktery nasledne exec spusti? za timto ucelem jsem zkousel globals(), locals() ve vsech kombinacich a nepomohlo to.

c) jak v pythonu zjistim aktualni velikost strankovaciho souboru? - pokud bych umel toto mohl bych nastavit nejakou kritickou hranici velikosti strankovaciho souboru, po jejimz prekroceni/dosazeni by se něco stalo (napr. by se program restartoval)
win XP (stacila by i syntaxe pro prikazovy radek(cmd) jenze to myslim ze nejde. jedine co jsem nasel byl prikaz "systeminfo", jenze ten neuvadi konkretne velikost strankovaciho souboru)

d) jak v pythonu predejit preteceni strankovaciho souboru? pripadne jak nejakou metodou vycistit pamet aby nedoslo k jejimu zaplneni? (cokoliv v tomto duchu :o))

e) cokoliv co si myslite ze by me pomohlo.

za veskere konstruktivni prispevky predem dekuji. hezky den.

Nahlásit jako SPAM
IP: 78.136.165.–
KIIV
~ Moderátor
+43
God of flame
7. 3. 2009   #2
-
0
-

zjistis velice rychle odpoved, kdyz se kouknes na vypis procesu... a pokud si zapnes i zobrazeni obsazene pameti tak jeste rychleji

na vse by mel stacit program taskmgr .. staci napsat v prikazovce
u nej se da prohlizet procesy... a kdyz klepnes pravym na ty liste s popiskama tak se da pridat jeste hromada dalsich sloupcu

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Jeffery
~ Anonymní uživatel
6 příspěvků
7. 3. 2009   #3
-
0
-

dekuji, ale to je mi naprosto k nicemu. to ze se zaplnuje strankovaci soubor jsem samozrejme zjistil z taskmanageru, ale ja nepotrebuju abych to vedel ja, ale aby to vedel ten program. "c) jak v pythonu zjistim aktualni velikost strankovaciho souboru?" presneji - to cislo co je v taskmanageru u strankovaciho souboru by bylo fajn mit v promenne, ale je to krajni varianta. radeji bych znal odpovedi na "a" a "b".

Nahlásit jako SPAM
IP: 78.136.165.–
KIIV
~ Moderátor
+43
God of flame
7. 3. 2009   #4
-
0
-

spis hod kod co ti to dela
ikdyz do pythonu teda nedelam nekdo muze kouknout a treba uvidi duvod

Nahlásit jako SPAM
IP: 89.24.6.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Quiark0
Věrný člen
7. 3. 2009   #5
-
0
-

JJ, já zkoušel prosté



while True:
eval("print 'ahoj'")


a to paměť nežralo.

Nahlásit jako SPAM
IP: 193.86.140.–
Jeffery
~ Anonymní uživatel
6 příspěvků
7. 3. 2009   #6
-
0
-

Quiark: To jo no eval jsen neznal ale ten už zase neumí třeba tohle :

a="""

c="ahoj"
w=c+" "
e=w*5
print c
print w
print e
"""


Jinak kód co bych se házel má asi 1000 řádků a to se mi fakt nechce. Spíš mě zajímá jak exec funguje a jak mám odstranit problémy co jsem zde popsal.

Nahlásit jako SPAM
IP: 78.136.189.–
Jeffery
~ Anonymní uživatel
6 příspěvků
7. 3. 2009   #7
-
0
-

>>> eval(a)

Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
eval(a)
File "<string>", line 2
c="ahoj"
^
SyntaxError: invalid syntax

>>> exec(a)
ahoj
ahoj
ahoj ahoj ahoj ahoj ahoj

Nahlásit jako SPAM
IP: 78.136.189.–
Jeffery
~ Anonymní uživatel
6 příspěvků
7. 3. 2009   #8
-
0
-

Aha !

eval("a")
'\nc="ahoj"\nw=c+" "\ne=w*5\nprint c\nprint w\nprint e\n'

No takže eval, ale nedělá vůbec to co exec. Jeho funkci naproto nepotřebuju. Potřebuju tu proměnnou spustit a né vypsat.

Nahlásit jako SPAM
IP: 78.136.189.–
Quiark0
Věrný člen
7. 3. 2009   #9
-
0
-

Aha, promiň, spletl jsem si eval a exec. Nicméně stejný kód mi funguje i s execem bez žraní paměti. To znamená, že asi se cosi neuvolňuje ve spouštěném kódu, nebo máš zabugovanou verzi pythonu. Takže bych zkusil ten execovaný kód postpně ořezávat, až přijdeš do bodu, kdy to přestane žrát tu paměť.

Nahlásit jako SPAM
IP: 193.86.140.–
Jeffery
~ Anonymní uživatel
6 příspěvků
8. 3. 2009   #10
-
0
-

Quiark: Ty jo dělám tady s tim všecko možný už a pořád to hltí paměť bezezměny. Nevim... možná že to exec nebude, ale pak nevim co... neznáš nějakej způsob jak si v pythonu udělám kopletní výpis všech proměnných i s obsahem? Pak bych zjistil co přesně se mi to tam vlastně plní.

Nahlásit jako SPAM
IP: 78.136.187.–
Quiark0
Věrný člen
8. 3. 2009   #11
-
0
-

Kromě locals(), globals() a spol. nic neznám. Možná něco bude existovat, to bys musel pohledat v dokumentaci. Každopádně vyzkoušej ten můj jednoduchej program, abys ověřil, že tvůj python je v pohodě. A pak metodu rozděl a panuj - oddělej půlku svýho programu a vyzkoušej, jestli to dál žere paměť. Pokud jo, tak oddělej další čtvrtku a tak dál. A taky můžeš zkusit před koncem toho kódu na každou proměnnou del.

Nahlásit jako SPAM
IP: 193.86.140.–
rainbof0
Newbie
13. 3. 2009   #12
-
0
-

zkus to obracene. udelej si kratkou smycku s execem, a postupne doplnuj veci podobne tomu puvodnimu programu az to pamet sezere. pak zacni orezavat..

Nahlásit jako SPAM
IP: 81.90.165.–
jadus.
~ Anonymní uživatel
99 příspěvků
13. 3. 2009   #13
-
0
-

hh ja mam jedno nechtne a spatne reseni. Ty instrukce si uloz samostane do souboru *.txt a pak si rozdel po linkach a nech prohnat kazdou linku tim execa nezapomen na \n

Nahlásit jako SPAM
IP: 88.103.38.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 13 hostů

Podobná vlákna

Exec() — založil juraj

Pár nejasností — založil Hnykda

Nejasnosti v Delphi — založil stif

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý