Рубрики
Без рубрики

Python, Windows и принтеры

Получите практические, реальные навыки Python на наших ресурсах и пути

Автор оригинала: Mike Driscoll.

Я делаю справедливое количество технической поддержки в дополнение к моему разработку программного обеспечения. В нашем небольшом магазине мы получаем возможность устранять все, что связано с технологиями, от сетей к программному обеспечению для принтеров. Я думаю, что один из самых раздражающих аспектов пытается заставить принтеры работать так, как пользователь хочет. Другой проблемой является создание принтеров для пользователей, которые должны быть бродить с ПК на ПК как часть их работы. Эти пользователи обычно нужны только принтеры, которые находятся в своем конкретном месте в любой момент времени. Очень сложно разместить этот тип пользователя, особенно если ПК используются 24/7, что верно в моем случае. Это где приходит Питон.

В этой статье я покажу вам, как получить доступ к установленным в данный момент принтеры на машине, изменить, какой из них по умолчанию и установка другого принтера. Я также покажу вам, как получить доступ к различным битам и кускам о принтерах, которые установлены в качестве этой информации, могут быть полезны в кодировании других административных сценариев.

Чтобы следовать, вам понадобится Python 2.4 – 3.x и Pywin32 пакет Отказ

Для нашей первой хитрости дня давайте узнаем, какие принтеры в настоящее время установлены на нашем ПК:

import win32print
printers = win32print.EnumPrinters(5)
print printers

Вы можете использовать разные целые числа в вызове перечислений, чтобы получить более или менее информацию. Увидеть Документация Для получения дополнительной информации (вам может потребоваться посмотреть на MSDN). Во всяком случае, вот это выборки выхода:

((8388608, «Snagit 9, Snagit 9 Принтер, ‘,’ Snagit 9 ‘,’ ‘), (8388608,’ Samsung ML-2250 Series PCL 6, Samsung ML-2250 Series PCL 6, ‘,’ Samsung ML-2250 Серия PCL 6 ‘,’ ‘), (8388608,’ pdfcreator, pdfcreator, ‘,’ pdfcreator ‘, adoc Printer’), (8388608, «Microsoft XPS Note Priter, Microsoft XPS Aceriter Acer, ‘, Microsoft XPS Presser ‘,’ ‘))

Как видите, перечисление вызов возвращает кортеж с вложенными кортежами. Если я вспомнку правильно, последний параметр будет Path unc, если принтер является сетевым принтером. На моем рабочем месте мы должны были вывести в эксплуатацию некоторых серверов, которые имели принтеры на них и нуждались в том, чтобы изменить настройки принтера пользователя, чтобы они указали на новый путь. Использование собранной выше информации сделана намного проще.

Например, если мой скрипт, итаированный над этим списком и нашел принтер, который использовал устаревший путь UNC, я мог бы сделать что-то подобное исправить это:

import win32print
win32print.DeletePrinterConnection('\\\\oldUNC\path\to\printer')
win32print.AddPrinterConnection('\\\\newUNC\path\to\printer')

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

import subprocess
subprocess.call(r'rundll32 printui.dll PrintUIEntry /in /q /n \\UNC\path\to\printer')

Для ситуации, которую я упомянул выше с роуминговыми пользователями, мне также обычно необходимо установить принтер по умолчанию, чтобы пользователь не случайно печатал в другом отделе. Есть два способа, что я нашел эту работу довольно хорошо. Если вы знаете имя принтера, вы можете использовать следующее:

import win32print
win32print.SetDefaultPrinter('EPSON Stylus C86 Series')

В указанном выше коде я устанавливаю по умолчанию на EPSON. Имя должно быть точно так же, как имя, отображаемое в диалоге «Принтеры и факсы» в Windows (перейдите к началу, настройкам, принтерам и факсам на Windows XP). Другой способ сделать это с другим вызывающим подпроцессором:

import subprocess
subprocess.call(r'rundll32 printui.dll PrintUIEntry /y /n \\UNC\path\to\printer')

Есть много дополнительных функций, которые поддерживают Win32Print. Вы можете начать и остановить задания на печать, устанавливать уровни приоритетов на заданиях печати, получить настройку принтера, расписание заданий и многое другое. Я надеюсь, что вы нашли это полезным.

Дальнейшее чтение