Целое число - дескриптор файла , целое число, которое ОС использует для описания дескрипторов файлов, назначенных процессу. 0
, 1
и 2
- это stdin
, stdout
и stderr
, 3 и выше - дополнительные файловые дескрипторы.
Вы получаете предупреждение о ресурсе, потому что вы открываете дескриптор файла, но никогда не закрываете его явно. Вместо этого вы просто вызываете .readlines()
или .readline()
в обертке объекта файла Python:
sink_list = os.popen('pacmd list-sinks | grep "name:" | cut --delimiter=: -f2').readlines()
Это оставляет объект файла закрытым сборщиком мусора, и вы получаете предупреждение. Вы можете использовать открытый объект в качестве менеджера контекста, чтобы закрыть его для вас:
with os.popen('pacmd list-sinks | grep "name:" | cut --delimiter=: -f2') as list_sinks:
sink_list = list_sinks.readlines()
Лично я бы использовал модуль subprocess
для обработки внешних процессов и использовал Python для выбора строки. Это позволяет избежать ускорения отдельного процесса sh
и обычно имеет гораздо более приятную обработку исключений:
import subprocess
# read list of sinks
result = suprocess.run(['pacmd', 'list-sinks'], stdout=subprocess.STDOUT, encoding='UTF-8')
sink_list = [l.split(':', 2) for l in result.stdout if 'name:' in l]
# read default sink
result = suprocess.run(['pacmd', 'list'], stdout=subprocess.STDOUT, encoding='UTF-8')
default_sink = next((l.split(':', 2) for l in result.stdout if 'Default sink name' in l), None)