Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - zu1234

Stran: 1 [2] 3
16
Vývoj / Re:Python unbuffered print v cmd
« kdy: 10. 02. 2022, 19:23:13 »
Pokusil jsem se to shrnout:

Windows 10, verze 21h2, 64bit:

c:\prj\py3>type x.py
TXT = ""
for I in range(3000):
        TXT += f"{I:09d}\n"
print(TXT)
print("Konec")

c:\prj\py3>C:\Users\uzivatel\AppData\Local\Programs\Python\Python39\python.exe x.py
...
000002988
000002989
000002990
000002991
000002992
000002993
000002994
000002995
000002996
000002997
000002998
000002999

Konec

c:\prj\py3>C:\Users\uzivatel\AppData\Local\Programs\Python\Python39\python.exe -u x.py
...
000000737
000000738
000000739
000000740
000000741
000000742
000000743
000000744
000000745
000000746
000000747
000000748
000000749

Konec

c:\prj\py3>  :(


17
Vývoj / Re:Kterým směrem se vydat od C
« kdy: 10. 02. 2022, 19:10:03 »
Mozno sa v nich pise kod neviem ako lahko, maju ficury ktore ine jazyky nemaju (preco asi???), ale pokial o ne nema zaujem zakaznik, tak si v nich mozte maximalne tak robit veci pre vlastnu zabavu mimo pracovnej doby.

Můj zákazník chce jeden soubor, ideálně kdy na něj klikne tak se objeví okýnka... Který je to jazyk?

PySimpleGUI?

18
Vývoj / Re:Python unbuffered print v cmd
« kdy: 26. 01. 2022, 20:51:55 »
Není to stupidní dotaz.
Bral jsem to jako upozornění python-veřejnosti na podivnost.
Po zkušenosti s celou touto diskuzí a s přihlédnutím ke svým
komunikačním dovednostem v cizím jazyku se nedám na nějaký
bug report.
Sorry. Třeba se najde někdo schopnější.

19
Vývoj / Re:Python unbuffered print v cmd
« kdy: 26. 01. 2022, 15:21:39 »
Pokud je stejný script puštěn přímo pomocí python.exe tak:

1) Není zohleňováno nastavení '-u' z 1. řádku: '#!/usr/bin/python3 -u'
Jinak řečeno: to že je to jindy zohledněno je práce Python Launcheru - py.exe .

2) Python dělá popisovanou chybu že nevytlačí celý řetězec pokud je
použito volání 'python.exe -u' , nebo pokud je vypnutí bufferování
uděláno v programu.


20
Vývoj / Re:Python unbuffered print v cmd
« kdy: 25. 01. 2022, 20:33:09 »
Co je prosím přesně napsáno na příkazové řádce té konzole před výpisem 000000000?

To se nedá zjistit, protože pokud výstup přesměruji do souboru, začne se program chovat správně - výpis je kompletní.

A co se stane když to pustíte v powershelu?

Chování stejné - viz příloha

21
Vývoj / Re:Python unbuffered print v cmd
« kdy: 25. 01. 2022, 16:17:07 »
V těch obrázcích je všechno, co se k tomu dá říct a taky
všechno co, jsem k tomu už několikrát napsal :-)
Tedy žádný cygwin. Prostě jen windowsy, jen gvim pro windowsy, jen příkazová řádka cmd a na ní jen x.py .
A to je celé. Připadám si jako čím dál zajímavější kouzelník :-)
Pořád někdo tvrdí že windowsy neumí #! . Je to nesmysl.
Podívete se na obrázky: program reaguje na to, zda v hashbang-u je nebo není -u .
Myslím že mezi samotným Pythonem-interpretem a zdrojákem v pythonu
je cosi, co se nainstaluje s Pythonem a jmenuje se Python Launcher.
Zadáním python na příkazové řádce se nespustí Python ale Microsoft store :-)
Na spuštění Python-interpretu musíte použít příkaz py .
Mluvím o Windows 10 (64bit) a Python 3.9.1 .

22
Vývoj / Re:Python unbuffered print v cmd
« kdy: 25. 01. 2022, 10:20:33 »
Viz přílohy

23
Vývoj / Re:Bash - převod proměnné do pole
« kdy: 25. 01. 2022, 09:56:52 »
...

Jiná varianta, nevím zda to přesně odpovídá zadání:

vstupsoub='stáhnout_čína.txt'
IFS=_
set -- ${vstupsoub%.txt}
for x
do
    echo "'$x'"
done

24
Vývoj / Re:Python unbuffered print v cmd
« kdy: 21. 01. 2022, 09:51:21 »
Osobně si myslím, že problém je ve Windows console, která má vlastní buffer a než se stihnout vypsat všechna data z bufferu té console, tak program skončí a Windows výpis zastaví. Zkuste to samé mimo Windows.
Pokud jsem Vás dobře pochopil, tak vypnutí bufferovaní v pythonu pod windows/cmd je jako z louže pod okap? :-))
Ano, opravdu to tak vypadá.
Když jsem ale běh program prodloužil nějakým blastem za příkazem print, nemělo to vliv na (špatné) chování.

Na Debianu samozřejmě všechno v pořádku!

25
Vývoj / Re:Python unbuffered print v cmd
« kdy: 19. 01. 2022, 09:57:14 »
jakou verzi pythonu máš? Jak to spouštíš?

Koukám, že pokud na výstup zapisuješ unicode (či ascii) znaky, Windows tam má 64Kb buffer (ale očividně ne pro všechny případy https://docs.microsoft.com/en-us/windows/console/writeconsole?redirectedfrom=MSDN), to odpovídá i tomu co ti to vypsalo.

Pokud chceš zapsat libovolné množství dat, musíš zapisovat v binárním módu, tj. -u, to ti ale očividně nefunguje a něco děláš špatně.

Pak je tady další otázka, ono vůbec není bezpečné na consoly vypisovat binární výstup, to může vést k dost podstatné zranitelnosti. Nemůžeš prostě vypisovaný text rozsekat na jednotlivé části a printovat postupně? Co ten tvůj use case má za smysl?
Python 3.9.1, W10 64bit
Příkaz print provádí konverzi kódování.
Problém vzniká při NEBUFFEROVANÉM výstupu.
Můj příspěvek není o tom že bych to neuměl nějak obejít (například stačí ponechat standartní buffered stav), ale o podivném chování unbuffered výstupu.

26
Vývoj / Re:Python unbuffered print v cmd
« kdy: 19. 01. 2022, 09:45:18 »
Varianta bez cesty ani náhodou není správnější (ta je úplně blbě), Windows shebang vůbec nepodporuje a ani Python sám ho neinterpretuje (AFAIK). Takže se výsledky svých snah nepokoušej nějak interpretovat, protože v postupu nemáš žádnou logiku.
Z chování programu vyplývá že windows shebang je zpracováván, protože chování programu se mění podle toho zda shebang obsahuje '-u'

27
Vývoj / Re:Python unbuffered print v cmd
« kdy: 18. 01. 2022, 16:38:34 »
Nejedná se zbytečný test, ale ilustraci problému kdy například program, který
vypisuje strukturu tabulek databáze, na windows cmd terminálu skončí jakoby v polovině.
Zajímavé je, že tak děje při VYNUTÉM bufferování.

28
Vývoj / Re:Python unbuffered print v cmd
« kdy: 18. 01. 2022, 16:10:13 »
Je to spuštěno na prosté cmd windows příkazové řádce.
Linuxový shebang je tam proto, že se snažím do programů přenesených z linuxu nezasahovat.
Na problém to nemá vliv (jak ostatně uvádím).
Varianta s flush = True se chová stejně blbě:
#!python3 -u
TXT = ""
for I in range(2000):
   TXT += f"{I:09d}\n"
TXT += "konec"
print(TXT, flush = True)

Konec výstupu na terminál:
...
000000990
000000991
000000992
000000993
000000994
000000995
000000996
000000997
000000998
000000999
00

29
Vývoj / Python unbuffered print v cmd
« kdy: 18. 01. 2022, 15:33:18 »
Po přenesení jednoho python programu z linuxu pod windows jsem zjistil divné chování příkazu print.
Aby se mi ve výstupech z programů (kdy se spojuje stout a stderr) nemíchalo
pořadí informací, zvykl jsem si nastavit python pomocí -u aby nebufferoval výstupy.

Když tento program spustím ve windows příkazové řádce
nedočkám správného konce výstupu - slova "konec":
#!/usr/bin/python3 -u
TXT = ""
for I in range(2000):
   TXT += f"{I:09d}\n"
TXT += "konec"
print(TXT)

Výstup skončí cca u hodnoty 1000.

Pokud na 1. řádku odstraním -u, začne se program
chovat správně, poslední slovo je 'konec'.
Popisované chování je stejné i když je na prvním řádku správnější:
#!python3 -u

Děje se tak jen pokud jde výstup přímo do terminálu a je nastaven zákaz bufferovaní.
Pokud jde výstup do souboru, nebo pokud odstraním '-u', funguje to správně.

Řešením asi bude vypínat bufferování až v programu, v závislosti na platformě:
if os.name == "posix":
   import io
   sys.stdout = io.TextIOWrapper(open(sys.stdout.fileno(), 'wb', 0), write_through=True)
   sys.stderr = io.TextIOWrapper(open(sys.stderr.fileno(), 'wb', 0), write_through=True)

30
Sítě / Re:Spojení PC s Ubuntu s vlastním mobilem přes Wi-Fi
« kdy: 11. 11. 2021, 09:02:32 »
Na stahování fotek používám 'SSH server' na mobilu.

Stran: 1 [2] 3