Подтвердить что ты не робот

Получение ProcessId в коде Python

Я в Windows и предположим, что у меня есть главный код python, который вызывает интерпретатор python в командной строке для выполнения другого python script, скажем test.py.

Итак, test.py выполняется как новый процесс. Как я могу найти processId для этого porcess в Python?

Update:

Чтобы быть более конкретным, у нас есть os.getpid() в модуле os. Он возвращает текущий идентификатор процесса.

Если у меня есть основная программа, которая запускает интерпретатор Python для запуска другого script, как я могу получить идентификатор процесса для выполнения script?

4b9b3361

Ответ 1

Если вы использовали подпроцесс для создания оболочки, вы можете найти идентификатор процесса в свойстве pid:

sp = subprocess.Popen(['python', 'script.py'])
print('PID is ' + str(sp.pid))

Если вы использовали многопроцессорную обработку, используйте свойство pid:

p = multiprocessing.Process()
p.start()
# Some time later ...
print('PID is ' + str(p.pid))

Ответ 2

Все зависит от того, как вы запускаете второй процесс.

Если вы используете os.system или подобное, этот вызов не будет сообщать ничего полезного о дочернем процессе pid. Один из вариантов заключается в том, чтобы ваш второй script передал результат os.getpid() обратно в исходный процесс через stdin/stdout или записывал его в предопределенное расположение файла. Другой альтернативой является использование сторонней библиотеки psutil, чтобы выяснить, какой именно процесс.

С другой стороны, если вы используете модуль subprocess для запуска script, результирующий объект "popen" имеет атрибут popen.pid, который даст вам идентификатор процесса.

Ответ 3

Вы получите идентификатор процесса вновь созданного процесса при его создании. По крайней мере, вы будете использовать fork() (Unix), posix_spawn(), CreateProcess() (Win32) или, возможно, любой другой разумный механизм для его создания.

Если вы вызываете двоичный код python, PID Python будет PID этого двоичного файла, который вы вызываете. Он не собирается создавать другой подпроцесс для себя (если ваш код на Python не делает этого).

Ответ 4

Другой вариант заключается в том, что выполняемый вами процесс будет устанавливать заголовок окна консоли для себя. И процесс поиска будет перечислять все окна, найти соответствующий дескриптор окна по имени и использовать дескриптор для поиска PID. Он работает с окнами, используя ctypes.