Как убить скрипт Python через другой скрипт при условии - PullRequest
0 голосов
/ 16 июня 2019

Я хочу вызвать 2 скрипта Python, используя tcp Условно через другой основной скрипт. Итак, когда мои данные, отправленные в основной сценарий, имеют значение «ДА», первый сценарий выполняется, а когда данные = «Нет», второй сценарий выполняется! проблема в том, что когда данные отправляются «ДА», первый скрипт запускается, а когда данные отправляются «нет», второй не выполняется, поэтому я понял, что мне нужно добавить условие, чтобы убить первый, чтобы запустить второй и наоборот, так как я могу это сделать? Помогите мне, пожалуйста!

#main script
#!/usr/bin/env python
import os
import socket
backlog = 1
size = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('192.168.43.95', 12345))
s.listen(backlog)
try:
    print ("is waiting")
    client, address = s.accept()
    while True:
        data = client.recv(size)
        if data == "YES \n":
            os.system('python script1.py')
        elif data == "No \n":
            os.system('python script2.py')
except:
    print("closing socket")
    client.close()
    s.close()

Ответы [ 2 ]

0 голосов
/ 16 июня 2019

просто добавьте

tcpSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

, чтобы снова использовать тот же адрес

0 голосов
/ 16 июня 2019

Нужно ли вам убить скрипт, все зависит от того, как вы хотите, чтобы программа работала. os.system() блокируется. Это означает, что основной сценарий НЕ выполняется (заблокирован) во время выполнения того, что вы вызывали с помощью os.system() - в вашем случае это либо python script1.py, либо python script2.py. Таким образом, если вы отправите «ДА» и после этого «Нет», начнется, и скрипт2 будет выполняться только после того, как скрипт1 завершит .

Если вы хотите, чтобы выполнение script1 и script2 происходило одновременно, вам следует использовать Popen из библиотеки subprocess .

Если вы хотите уничтожить скрипт, который запустился первым, когда вы получили новую команду (обычно это не очень хорошая идея, но есть способы ее использования), вы можете использовать Popen.kill().

...