Запустить скрипт Python из приложения AppleScript - PullRequest
0 голосов
/ 30 мая 2018

Мне интересно, можно ли запустить приведенный ниже сценарий из или внутри AppleScript App .

Идея, лежащая в основе всего этого, заключается в том, что людям не нужно запускать и иметь дело с кодом, скажем, им не нужно будет запускать его из SublimeText или около того, вместо этого просто нажмитеприложение и пусть скрипт запускается и на работу.Если это имеет смысл для вас?

from bs4 import BeautifulSoup
import requests
import csv

class_1 = {"class": "productsPicture"}
class_2 = {"class": "product_content"}
class_3 = {"class": "id-fix"}

# map a column number to the required find parameters
class_to_find = {
0 : class_3,    # Not defined in question
1 : class_1,    
2 : class_1,
3 : class_3,    # Not defined in question
4 : class_2, 
5 : class_2}

with open('urls.csv', 'r') as csvFile, open('results.csv', 'w', newline='') as results:
reader = csv.reader(csvFile)
writer = csv.writer(results)

for row in reader:
    # get the url

    output_row = []

    for index, url in enumerate(row):
        url = url.strip()

        # Skip any empty URLs
        if len(url):
            #print('col: {}\nurl: {}\nclass: {}\n\n'.format(index, url, class_to_find[index]))

            # fetch content from server

            try:
                html = requests.get(url).content
            except requests.exceptions.ConnectionError as e:
                output_row.extend([url, '', 'bad url'])
                continue
            except requests.exceptions.MissingSchema as e:
                output_row.extend([url, '', 'missing http...'])
                continue

            # soup fetched content
            soup = BeautifulSoup(html, 'html.parser')


            divTag = soup.find("div", class_to_find[index])

            if divTag:
                # Return all 'a' tags that contain an href
                for a in divTag.find_all("a", href=True):
                    url_sub = a['href']

                    # Test that link is valid
                    try:
                        r = requests.get(url_sub)
                        output_row.extend([url, url_sub, 'ok'])
                    except requests.exceptions.ConnectionError as e:
                        output_row.extend([url, url_sub, 'bad link'])
            else:
                output_row.extend([url, '', 'no results'])      

    writer.writerow(output_row)

1 Ответ

0 голосов
/ 30 мая 2018
  1. Открыть Редактор AppleScript в macOS.

  2. В новом окне добавить следующие две строки кода:

    set desktop_folder to "$HOME/Desktop"
    do shell script "python " & desktop_folder & "/Pricematch/foo.py"
    

    Примечание: Предполагается, что файл foo.py сохраняется в папке с именем Pricemacth , которая существует в папке Desktop пользователя.Вам нужно будет заменить часть foo.py реальным реальным именем файла.

    Поскольку переменная desktop_folder установлена ​​в "$HOME/Desktop", вы сможете развернуть ее для нескольких пользователей без каких-либо проблем.Вам просто нужно убедиться, что папка с именем Pricematch находится в их папке Desktop и содержит файл .py для запуска.Часть $HOME автоматически примет папку Пользователь , поэтому вам не нужно будет указывать разные имена пользователей для каждого пользователя.

    Если вы решите изменить расположение .py, выВам необходимо соответствующим образом обновить путь в AppleScript.

  3. Чтобы сохранить AppleScript:

    • выберите Файл > Сохранить как из строки меню.
    • Выберите Формат файла > Приложение
    • Введите имя файла.Например, run-python-script.app
    • Нажмите кнопку Save.(его можно сохранить в любом месте папки)
  4. Дважды щелкните run-python-script.app в Finder, чтобы запустить его.


РЕДАКТИРОВАТЬ

В ответ на комментарий:

возможно ли как-то получить уведомление, когда скрипт python завершит свою работу.

Вот несколько советов - предполагается, что скрипт python возвращает статус выхода ноль / успех.Вы можете попробовать изменить вторую строку в AppleScript на:

  1. Для отображения диалогового сообщения:

    do shell script "python " & desktop_folder & "/Pricematch/foo.py && osascript -e 'tell application \"Finder\" to activate' -e 'tell application \"Finder\" to display dialog \"Finished Python Script\"'"
    
  2. Или, если говорить что-то:

    do shell script "python " & desktop_folder & "/Pricematch/foo.py && osascript -e 'set Volume 4' -e 'tell application \"Finder\" to say \"Finished!\"' -e 'set Volume 0'"
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...