почему я получаю ошибку 1804 из win32print.SetJob? - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь изменить имя задания в спулере Win32, используя Python 3.6 и win32print в Windows 10.

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

import sys, os
import time
import win32print
#####################################
def print_job_lister( js='' ):
    """
    Finds a job whose name contains the passed substring.
    """

    res = None
    for p in win32print.EnumPrinters( win32print.PRINTER_ENUM_LOCAL, None, 1 ):
        flags, desc, name, comment = p
        showprinter = True

        phandle = win32print.OpenPrinter( name )
        print_jobs = win32print.EnumJobs( phandle, 0, -1, 1 )
        for job in print_jobs:
            document = job["pDocument"]
            if js in document:
                if showprinter:
                    print( f'printer => {name}')
                    showprinter = False
                print( f'  Document => {document}')
                print( f'  JobId => {job["JobId"]}  Status => {job["Status"]}'
                       f'  Pages => {job["TotalPages"]}')
                if not res:
                    res = ( name, job["JobId"])
        win32print.ClosePrinter( phandle )
    return res
#####################################
if __name__ == '__main__':
    js = '20181114'
    rename = 'foobar'
    res = print_job_lister( js )
    print( res )
    if res:
        phandle = win32print.OpenPrinter( res[ 0 ])
        jobinfo = win32print.GetJob( phandle, res[ 1 ], 1 )
        jobinfo['Position'] = win32print.JOB_POSITION_UNSPECIFIED
        if rename:
            jobinfo['pDocument'] = rename
            print( f'abc {win32print.JOB_POSITION_UNSPECIFIED} {jobinfo}')
            win32print.SetJob( phandle, res[ 1 ], 1, jobinfo, 0 )
        win32print.ClosePrinter( phandle )

Вот ошибка, которую я получаю:

{'JobId': 27, 'pPrinterName': 'HL6180dw', 'pMachineName': '\\\\STEPHEN', 'pUserName': 'Glenn', 'pDocument': 'duh', 'pDatatype': 'NT EMF 1.008', 'pStatus': None, 'Status': 8210, 'Priority': 1, 'Position': 0, 'TotalPages': 22, 'PagesPrinted': 0, 'Submitted': pywintypes.datetime(2018, 11, 14, 21, 1, 27, 882000, tzinfo=TimeZoneInfo('GMT Standard Time', True))}
Traceback (most recent call last):
  File "D:\my\py\spool.py", line 109, in <module>
    win32print.SetJob( phandle, res[ 1 ], 1, jobinfo, 0 )
pywintypes.error: (1804, 'SetJob', 'The specified datatype is invalid.')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...