如何在条件下通过另一个脚本杀死python脚本

时间:2019-06-15 23:16:06

标签: python tcp raspberry-pi operating-system

我想使用tcp有条件地通过另一个主脚本调用2个python脚本。 因此,当我发送到主脚本的数据为“是”时,将执行第一个脚本,而当数据=“否”时,将执行第二个脚本!问题是,当数据发送为“是”时,第一个脚本运行,但是当数据发送为“否”时,第二个脚本不执行,因此我意识到我必须添加一个条件来杀死第一个脚本,以便运行第二个,反之亦然,那我该怎么办?请帮帮我!

#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 :(得分:0)

是否需要终止脚本全部取决于您希望程序如何运行。 os.system()正在阻止。这意味着在运行os.system()调用的任何内容时,主脚本都不会执行(被阻止)-在您的情况下为python script1.pypython script2.py。因此,如果您发送“是”,然后发送“否”,则将开始启动,并且仅在 script1完成之后执行script2

如果要同时执行script1和script2,则应使用subprocess库中的Popen

如果您想杀死收到新命令时首先运行的脚本(通常不是一个好主意,但是有用途),则可以使用Popen.kill()

答案 1 :(得分:0)

只需添加

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

再次使用相同的地址