Имя процесса при его создании с помощью подпроцесса python.Popen () - PullRequest
0 голосов
/ 24 сентября 2019

Я использую подпроцесс python.Popen () для запуска нескольких подпроцессов одновременно.Каждый раз, когда процесс завершается, я хочу напечатать что-то подобное в оболочку: process ABC has been terminated ABC - это имя, которое я даю процессу сам.Я подумал, что, возможно, есть способ добиться этого, используя такой код: process.name()

Есть ли способ сделать это через subprocess.Popen ()?

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Это учебный пример того, для чего вы используете наследование.

import subprocess

class NamedPopen(subprocess.Popen):
     """
     Like subprocess.Popen, but returns an object with a .name member
     """
     def __init__(self, *args, name=None, **kwargs):
         self.name = name
         super().__init__(*args, **kwargs)

fred = NamedPopen('sleep 11; echo "yabba dabba doo"', shell=True, name="fred")
barney = NamedPopen('sleep 22; echo "hee hee, okay fred"', name="barney", shell=True)
print('... stay tuned ...')
fred.wait()
barney.wait()

Только позаботьтесь о том, чтобы не выбирать имя атрибута, которое родительский класс использует для чего-то другого.

1 голос
/ 24 сентября 2019

Нет портативного способа сделать это с помощью subprocess, вы можете использовать другой пакет в сочетании с ним, вы можете проверить библиотеку https://github.com/dvarrazzo/py-setproctitle.

Используя этот модуль, вы можете назватьназвание процесса, а затем получить к нему доступ и легко распечатать нужный вывод.

...