» Poradna » Programy

Python 3.12.0 - Nefunguje testovaní existence PID v macOS

 |   |  Microsoft Windows 10 Chrome 119.0.0.0

Ahoj, když spustím takový script tak funguje naprosto v pořádkuimport psutilpid = 12345if psutil.pid_exists(pid): print("true")else: print("false")pokud ale vložím script do cyklu, a změním existenci testovaného PIDstav se v cyklu nezmění, poradí někdo? Díky

Mohlo by vás také zajímat

Odpovědi na otázku

 | Microsoft Windows 10 Chrome 118.0.0.0

Já bych si tipnul že to bude nějakou optimalizací a cachováním. Takže se zkus podívat po nějaké funkci na refresh. Ale víc ti neporadím, já s pythonem nedělám.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 119.0.0.0

Jako, že bych v cyklu importoval psutil stále dokola?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Android Chrome 119.0

Možná by bylo fajn, napsat sem ten nefunkční kód.

Souhlasím  |  Nesouhlasím  |  Odpovědět
avatar
 | Unknown Mozilla 109.0

Hod sem ten kod s chybou (resp. nekam na PasteBin), jinak je to akademicka debata.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 119.0.0.0

while True:import psutilpid = 12345if psutil.pid_exists(pid):print("true")else:print("false")break

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Android Chrome 119.0

A co konkrétně na tom nefunguje?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 119.0.0.0

Když je prvotní stav false tak je už pořád false, to stejne platí i pro true.

Souhlasím  |  Nesouhlasím  |  Odpovědět
avatar
 | Microsoft Windows 10 Firefox 119.0

Jsi si jistý, že vytváříš opravdu dané PID ?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 119.0.0.0

Ano, opravdu, v příkladu je jen číslo,

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Android AppleMAC-Safari 5.0

Ne, opravdu ne, protože PID nemůžeš explicitně předem určit…

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Linux Chrome 119.0.0.0

Tvl. Tak už tři mínusáčci nedali pojem PID a jaký vliv na něj (ne)má uživatel? To je ale zase úroda. 🤪 Klasická Poradna.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Chrome 118.0.0.0

Jo to je klasika. To že se někomu nelíbí tvoje odpověď neznamená že je ta odpověď špatná. Prostě ty mínusy ignoruj a budeš mít klid, já to tak dělám už roky.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Linux Chrome 119.0.0.0

Tak jasně, že je ignoruju. Většinou tady beztak platí, že čím lepší odpověď, tím víc mínusů, protože například delší text drtivá většina mínusáčků nedá. Může to mít tak maximálně 2 věty, víc ne.Ale pošklebovat se jim můžu i tak, ne? Hlavně v případech, kdy ani ten kratší text nedají. Jako v tomhle případě. To už snad leda abych to napsal jazykem slabikáře. Ema mele sado maso…

Souhlasím  |  Nesouhlasím  |  Odpovědět
avatar
 | Microsoft Windows 10 Firefox 119.0

To tak bohužel bývá. A navíc, co si má kolikrát tazatel myslet, když nejlepší odpověď na dotaz, kterou potřeboval je nejvíc umínuskovaný.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 119.0.0.0

EDIT :)import psutilpid = 12345while True:if psutil.pid_exists(pid):print("true")else:print("false")break

Souhlasím  |  Nesouhlasím  |  Odpovědět
avatar
 | Microsoft Windows 10 Firefox 119.0

Podle zdrojového kódu psutil knihovny to vypadá, že by vše mělo fungovat...Zkus si ze zvědavosti v tom cyklu printnout, jaký PID existují. vizProblém bude asi někde schovaný jinde.from time import sleepwhile True: print(psutil.pids()) sleep(1)

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 119.0.0.0

a jak přesně děláš toto "změním existenci testovaného PID" ?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Chrome 118.0.0.0

Já s macem nedělám tak netuším jestli tam jde spustit proces a přiřadit mu nějaký konkrétní PID. Ale obráceně, tj killnout process s nějakým konkrétním PID určitě jde.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 119.0.0.0

Ukončím běžící aplikaci s daným PID.

Souhlasím  |  Nesouhlasím  |  Odpovědět
avatar
 | Microsoft Windows 10 Firefox 119.0

A co se stane potom? Pokud opravdu poustis ten skript, ktery jsi sem napsal, tak se ta existence procesu zjistuje mnohokrat za sekundu a nestihne se to ani vypisovat na obrazovku.Dej do toho cyklu nejakou pauzu (aspon pul sekundy) a pak teprve delej nejake zavery.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 119.0.0.0

Není to několikrát za sekundu ale 2x za 3 sekundy. Sleep jsem samozřejmě zkoušel.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Android AppleMAC-Safari 5.0

První odkaz z vyhledávání nepomáhá? https://stackoverflow.com/questions/53782549/python...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 119.0.0.0

Ne.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 118.0.0.0

Kecas. Nevyzkousel jsi to...Pokud ano, tak sem hod kod a ja se omluvim.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Linux Chrome 119.0.0.0

Aha. To je zajímavé. A jaký přesně tam byl problém tentokrát? Dej příslušný kód na Pastebin, rád se podívám.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Macintosh OS X Firefox 119.0

https://pastebin.com/u04Z1RmA Funkčí na macOS Python 3.11macOS Python 3.12 nefunkčníBude buď chyba v knihovně, nebo v Pythonu. Spíš bych tipoval, že knihovna musí něco upravit pro novější verzi Pythonu.Řešení je buď použít poslední verzi Pythonu 3.11 do opravy, nebo si poradit jinak. Je více způsobů jak řešit jestli PID v systému existuje.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Linux Chrome 119.0.0.0

Tazatel měl ovšem na mysli to, zda lze překontrolovat pid_exists() *po* os.waitpid(pid, 0).Což (jak se píše zde https://stackoverflow.com/questions/53782549/python... ) není 100% triviálně snadné, protože příslušná (kni)hovna nabízí celkem sofistikovaný „atomický snapshot“ seznamu procesů, tj. pokud chce člověk ten snapshot aktualizovat, musí pro to něco málo udělat.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Linux Chrome 119.0.0.0

Tak už pět mínusáčků nerozdýchalo, co je to atomický snapshot a proč by seznam procesů měl odpovídat nějakému atomickému stavu systému. 🤪 Co kdybych to zkusil vysvětlit polopatě, po lopatě a po motyce? Pomohlo by to?Hele, máme programy A a Ž. Z těch můžou vzniknout procesy, říkejme jim třeba taky A a Ž; dejme tomu, že každý program poběží jen v jedné instanci. No a program Ž se vyznačuje tím, že spouští program A a potom čeká, až A skončí. Ž je určený k manuálnímu spouštění, zatímco A nikoliv (jinými slovy, spouští ho pouze Ž). Tak. Tolik na úvod do naší modelové situace. Mínusáčci: Chápeme? I tam vzadu?Dobrá. Pojďme dál. Tak spustíme tedy program Ž. Časová osa (shora dolů) bude vypadat takhle:— Start programu Ž (uživatel spustil Ž)—— Start programu A (Ž spustil A)—— [[Tady ke okamžik O. Ten si zapamatujte!]]—— Program A končí— Program Ž se dočká konce A— Program Ž končí— [[Tady je okamžik P. I ten si zapamatujte!]]Tak. A teď si řekněme, jaký předpoklad vyplývá z chování programů Ž a A. Ví někdo? Mínusáčci, přemýšlejte!Předpoklad je: „Nikdy bychom neměli vidět stav systému, ve kterém běží A, ale neběží Ž.“ Proč? No protože Ž vždycky spustí A, tj. proces s programem A je vždy „mladší“ než proces s programem Ž, a následně pak taky trpělivé Ž čeká, až A skončí. Takže *celý* interval existence procesu A se musí vejít do intervalu existence procesu Ž. (Všimněte si, jak drze zaměňujeme slova program a proces; detaily ponechám zvídavým čtenářům k samostudiu.)Tak. A teď si představme monitorovací program M, který hledá procesy. Dejme tomu, že hledání programu M *není* atomické. Například M prochází abecedou a pro každé písmeno vyhledá v daném (pokaždé jiném) okamžiku běžící procesy. Napřed se dívá, které procesy Ukázat celý příspěvek

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Chrome 119.0.0.0

Hele a děláš vůbec něco s tím procesem v průběhu běhu toho scriptu?Tzn, je-li při spuštění scriptu proces s daným PID spuštěn tzn výstup "true" musíš ten proces zavřít/ukončit, aby se ti výpis změnil na "false", pozor může to mít určitou prodlevu. A naopak.

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: macOS, PID, Existence