Я работаю над инструментом для ввода данных на моей работе, где он в основном принимает идентификационный номер отчета, открывает PDF-файл на эту страницу этого отчета, позволяет вам для ввода информации, а затем сохраняет ее.Python: завершить процесс и закрыть окно, открытое в (windows)
Я совершенно не знаком с созданием новых процессов в python; это первый раз, когда я действительно пытался это сделать. поэтому в основном, у меня есть соответствующие функции:
def get_report(id):
path = report_path(id)
if not path:
raise NameError
page = get_page(path, id)
proc = subprocess.Popen(["C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe", "/A", "page={}".format(page),
path])
для того, чтобы открыть отчет в Adobe Acrobat и иметь возможность ввода информации в то время как отчет остается открытым, я решил, что я должен был использовать multiprocessing
. Таким образом, в результате, в основном цикле программы, где оно проходит по данным и получает идентификатор отчета, у меня есть это:
for row in rows:
print 'Opening report for {}'.format(ID)
arg = ID
proc = Process(target=get_report, args=(arg,))
proc.start()
row[1] = raw_input('Enter the desired value: ')
rows.updateRow(row)
while proc.is_alive():
pass
Таким образом, можно вводить данные без программы висит на subprocess.Popen()
команда. Однако, если он просто переходит к следующей записи, не закрывая окно Acrobat, которое появляется, оно фактически не откроет следующий отчет. Следовательно, while proc.is_alive():
, так как он дает возможность закрыть окно вручную. Я бы , как, чтобы убить процесс сразу после нажатия «enter», и введенное значение, поэтому оно будет продолжаться и просто откроет следующий отчет с еще меньшей работой. Я пробовал несколько разных вещей, способы убить процессы через pid
, используя os.kill()
; Я попытался убить подпроцесс, убив сам процесс, убив их обоих, а также попытался использовать subprocess.call()
вместо Popen()
, чтобы узнать, не изменилось ли это.
Это не так.
Что мне здесь не хватает? Как убить процесс и закрыть окно, в котором оно было открыто? Возможно ли это? Как я уже сказал, у меня всего около 0 опыта с процессами на python. Если я делаю что-то ужасно неправильно, пожалуйста, дайте мне знать!
Заранее спасибо.
Вы пробовали sys.exit (0)? –
Нет, я не ... Я, наверное, неправильно понял; Я думал, что он тоже выйдет из основной программы? Я только хочу закрыть окно/процесс, порожденный как ребенок основного процесса. Будет ли это делать? – carusot42
Я думаю, что неправильно понял. Вы хотите закрыть процесс Adobe Reader? –