Как сообщить скрипту Python о закрытии после запуска

#python #selenium-webdriver

#python #selenium-webdriver

Вопрос:

Я полный новичок в python… Я написал простой скрипт, который извлекает некоторые данные с веб-сайта и сохраняет их в текстовый файл, но после запуска скрипта он просто остается там и не «завершается». Поскольку я буду запускать его как задачу Windows, мне нужно, чтобы он закрывался сам по себе после запуска. Есть ли способ сообщить python закрыть терминал после завершения скрипта? Я искал везде, и кажется, что большинство людей пытаются сделать наоборот, оставить его открытым после запуска кода. Не уверен, имеет ли это значение, но я просто запускаю файл .py, а не в VS или PyCharm. Заранее спасибо.

 from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
from datetime import date




driver = webdriver.Chrome()
driver.get("MyURL")
time.sleep(11)
first = driver.find_element_by_xpath('/html/body/main/div[2]/div/div/div/div[2]/div[1]/div/div[2]/div[2]/div/ul/table/tbody/tr[3]/td[2]/div/span[1]')
second = driver.find_element_by_xpath('/html/body/main/div[2]/div/div/div/div[2]/div[1]/div/div[2]/div[2]/div/ul/table/tbody/tr[2]/td[2]/div/span[1]')
third = driver.find_element_by_xpath('/html/body/main/div[2]/div/div/div/div[2]/div[1]/div/div[2]/div[2]/div/ul/table/tbody/tr[1]/td[2]/div/span[1]')

first = first.text
second = second.text
third = third.text

print(first, second, third)

today = date.today()
today1 = today.strftime('%b %d %Y')

list = (today1, first, second, third)
print(list)

file = open('test.txt', 'a')
file.write(today1)
file.write(' ')
file.write(first)
file.write(' ')
file.write(second)
file.write(' ')
file.write(third)
file.write('n')
file.close()


driver.close()
  

Комментарии:

1. Когда вы говорите «запуск файла .py», вы имеете в виду, что вы дважды щелкаете по нему в проводнике Windows, и он запускается? Вероятно, это означает, что у вас есть «pylauncher», который запускает его, и это будет держать окно открытым — но это действительно зависит от того, какая программа настроена на вашем компьютере для запуска файлов .py. Похоже, что ваш код не виноват — он завершается, и оттуда он ничего не может сделать, чтобы закрыть окно.

2. Я не знаю, почему терминал останется открытым, но вы можете позвонить exit() , чтобы завершить сценарий.

3. Это терминал или браузер Chrome, который остается открытым?

4. или переименуйте его из .py в .pyd

5. вы пробовали запускать его как задачу Windows? Окно терминала может быть там только из-за того, как вы запустили его в графическом интерфейсе.

Ответ №1:

Для 1. вам необходимо отправить запущенный процесс в фоновый режим и удалить связанное задание из текущей оболочки.

Нажмите Ctrl Z и введите bg , чтобы отправить процесс установки в фоновую панель, затем введите disown .

Теперь вы можете закрыть терминал, процесс все еще будет работать. Вы можете открыть другой терминал и проверить его идентификатор процесса с помощью ps -aef

В моем случае идентификатор процесса 14426 равен . К сожалению, нет простого способа повторно подключить его к другому терминалу (см. Как подключить терминал к отдельному процессу?) если вы не использовали что-то, основанное на screen .

Для 2. Вы можете использовать следующую команду:

while kill -0 14426 >/dev/null 2>amp;1; do sleep 5 ; done ; echo "ok" Он будет напечатан ok , когда процесс завершится с другого терминала. Вы, конечно, можете изменить эту echo команду на что-то более сложное.

Источник: BASH: запустите фоновый процесс и проверьте, когда он закончится

Комментарии:

1. Поскольку скрипт завершается в конце, я все равно не понимаю, как это поможет.

Ответ №2:

Хорошо, я нашел кое-что, что сработало. Я заметил, что процесс chromedriver все еще выполняется даже после выполнения строки driver.close() . Я пошел дальше и остановил процесс, и скрипт немедленно закрылся. Я предполагаю driver.close() , что закрывает окно Chrome, но не убивает chromedriver, поэтому скрипт зависал в ожидании завершения процесса. Я заменил driver.close() на driver.quit() и теперь скрипт закрывается после запуска. Спасибо всем за помощь!!