Оставить процесс открытым и перейти к остальной части кода Python (программа с технологией обработки естественного языка) - PullRequest
0 голосов
/ 14 февраля 2020

Хорошо -> моей задачей было написать программу, которая выполняет команды, написанные на естественном языке. Он ищет ключевые фразы, чтобы узнать, следует ли включать / выключать какую-либо программу или процесс, а также просматривать net с указанной ссылкой. Вы можете просматривать и завершать приложения столько раз, сколько хотите, и открытие работает нормально НО только один раз: c

Мне не удается заставить его работать в любом oop, чтобы вы могли открыть много приложений, убить некоторые из них, а затем, например, просмотреть net с помощью google.com

Сначала я написал скрипт, создающий список открываемых приложений в / usr / share / Applications / и назвал его bash_apps. sh

#!/usr/bin/env bash

echo  > application_list

for app in /usr/share/applications/*.desktop;
do app="${app##/*/}";
echo "${app::-8}" >> application_list;
done

Затем я написал скрипт, создающий список текущих рабочих процессов (доступных для уничтожения), и назвал его bash_processes. sh

#!/usr/bin/env bash

echo  > processes_list

ps -ef | awk '{print $8}' >> processes_list

А вот так выглядит код моей программы:

import os
from difflib import SequenceMatcher
import subprocess


def similar(a, b):
    return SequenceMatcher(None, a, b).ratio()


def run(application):
    similar_names = []
    f = open('application_list', 'r')
    for line in f:
        line = line[:-1]
        similar_names.append([similar(line, application), line])
    f.close()
    apps = sorted([i for i in similar_names if i[0] > 0.6], reverse=True)
    if len(apps) > 1:
        for i, pr in zip(range(len(apps)), apps):
            print(i, pr[1])
        print('Which of those programs do you want to open? Please, enter number and specify:')
        n = input()
        print('Turning on: ' + apps[int(n)][1])
        subprocess.run(apps[int(n)][1])
    else:
        print('Opening ' + apps[0][1] + '...')
        subprocess.run(apps[0][1])


def close(process):
    os.system('./bash_processes.sh')
    similar_processes = []
    f = open('processes_list', 'r')
    for line in f:
        line = line[:-1]
        similar_processes.append([similar(line, process), line])
    f.close()
    processes = sorted([i for i in similar_processes if i[0] > 0.4], reverse=True)
    for i, pr in zip(range(len(processes)), processes):
        print(i, pr[1])
    print('Which process would you like to close? Please, enter number and specify:')
    num = input()
    print('Killing process: ' + processes[int(num)][1])
    os.system('killall ' + processes[int(num)][1])


def openet(site):
    os.system('opera ' + site)


turnOn = ['open', 'execute', 'on', 'run']
turnOff = ['close', 'off', 'stop', 'kill']
browse = ['internet', 'web', 'browse', 'browser']
os.system('./bash_apps.sh')


def main():
    inp = input().lower().split()
    if True in [(i in turnOn) for i in inp]:
        run(inp[-1])
    if True in [(i in turnOff) for i in inp]:
        close(inp[-1])
    if True in [(i in browse) for i in inp]:
        openet(inp[-1])
    if inp[0] == 'quit' or 'exit':
        return 0


print("What do you want from me?")
while True:
    main()

Кажется, это просто, но я не смог найти информацию, как это сделать. Спасибо за помощь заранее. Хорошего дня!

...