Скрипт Python аварийно завершает работу при вызове из второго скрипта
У меня есть скрипт генерации отчетов (назовем его A), который генерирует отчет в формате PDF. Я хочу импортировать это в новый скрипт (скрипт B) и вызывать функции из этого нового скрипта.
Проблема:
1. Скрипт аварийно завершает работу при вызове из скрипта Б именно на создание объекта QPixmap. Консоль Python перезапускается.
2. скрипт а работает нормально, когда он запускается сам по себе, но если я попытаюсь вызвать его из командной строки python.exe аварии.
Я объясню и покажу код в следующем разделе, поскольку лучшее, что мне удалось сделать, - это определить проблемы.
Что я уже пробовал:
Ниже приведен сценарий В. Все, что он делает, это импортирует скрипт A, создает экземпляр класса, определенного в A, и использует его для вызова метода этого объекта.
import Script A as et a = "sample" mdbPath = "C:\\Python27\\test.mdb" directory = "C:\\Python27" ui = et.HawkAutomationScript() ui.Main(mdbPath,directory,a)
Сценарий А содержит определение класса с именем
HawkAutomationScript
Этот объект содержит две функции, которые следует отметить: одну основную функцию и одну функцию для создания отчета. Это импортированные модули:from random import* import sys import os import subprocess import time from datetime import datetime from PyQt4 import QtCore, QtGui from PyQt4.QtCore import QRect from PyQt4.QtGui import QTextDocument, QPrinter, QApplication, QPainter from string import Template import shutil import time import pyodbc
Это определение класса и основной функции:
doc = QTextDocument() myCursor = QtGui.QTextCursor(doc) class HawkAutomationScript(object): def Main(self,mdb,directory,name): Ui_FormObject = HawkAutomationScript() ## Filling in the Report ## Ui_FormObject.fnGenerateReport(directory,name)
def fnGenerateReport(self,directory,name): now = datetime.now() dateString = now.strftime("%d-%b-%Y") # For getting Current Date dirPath = "C:\\Users\\michael\\Downloads\\Ethernet\\scripts\\" ResultName = "SelfTest_Results" testName = name+".pdf" subDirPath = dirPath + name if(os.path.isdir(dirPath)): if(os.path.isdir(subDirPath)): subDirPath = subDirPath + testName else: os.mkdir(subDirPath) subDirPath = subDirPath + testName else: os.mkdir(dirPath) os.mkdir(subDirPath) subDirPath = subDirPath + testName pixmap = QtGui.QPixmap(doc.size().width(), doc.size().height()) ################ printer = QPrinter() printer.setOutputFileName(subDirPath) printer.setOutputFormat(QPrinter.PdfFormat) doc.print_(printer) # Create a QPainter to draw our content painter = QPainter(pixmap) painter.begin( printer ) doc.drawContents(painter) painter.end()
Это все соответствующий код.
Если я запускаю скрипт B, A вылетает в строке QPixmap, отмеченной в коде. Но если я копирую строки из B и выполнить самостоятельно, отчет в формате PDF создается. Но если я запускаю A сам по себе из командной строки python.exe аварии.
Любая помощь будет очень признательна. Спасибо!!
Richard MacCutchan
Не знаю точно, в чем проблема, но одна очевидная проблема заключается в том, что dirPath
и subDirPath
оба они указывают на один и тот же каталог, когда вы звоните mkdir
.
TheLostJedi
Спасибо Вам за ответ! Я этого не заметил. subDirPath
предполагалось, что все будет по-другому. Но в этом случае каталог существует. Так что, хотя это могло бы вызвать проблему позже, прямо сейчас она выходит из-под контроля. if
блок без каких-либо проблем, но выходит из строя после QPixmap
заявление. Меня смущает тот факт, что это происходит только при вызове из другого скрипта. В любом случае спасибо!
Richard MacCutchan
Я не вижу ничего плохого, но у меня нет опыта использования Qt из Python. Я могу только предложить использовать отладчик, чтобы попытаться захватить больше информации.