Skip to content
Snippets Groups Projects
processusEnvoi4G.py 2.75 KiB
Newer Older
Hicham Brahimi's avatar
Hicham Brahimi committed
# A executer avec SUDO
# PYTHON 3.5+

import subprocess
import time
import socket
import sys
Hicham Brahimi's avatar
Hicham Brahimi committed
import os
import os.path
from datetime import datetime
import psutil

def check_pid(pid):
	# Verifie l'existence d'un pid
	if psutil.pid_exists(pid):
		p = psutil.Process(pid)
		if p.status() != psutil.STATUS_ZOMBIE:
			return True
	return False


# Verifie qu'il n'y a pas d'autres processus d'envoi en verifiant le fichier lock
if os.path.isfile("./.lockprocess"): print("Locked")
while os.path.isfile("./.lockprocess"): time.sleep(1)
Hicham Brahimi's avatar
Hicham Brahimi committed
# Creer un nouveau fichier lock pour verrouiller les autres processus
if not os.path.isfile("./.lockprocess"):
	open(".lockprocess", "a").close()
	subprocess.Popen(["chmod", "777", ".lockprocess"])
else: # Si un processus s'est activée entre la 1ere boucle et la condition
	while os.path.isfile("./.lockprocess"): time.sleep(1)
	open(".lockprocess", "a").close()
	subprocess.Popen(["chmod", "777", ".lockprocess"])

IP_PC = "91.162.19.165"
PORT = 20000
nomFichier = sys.argv[1]
Hicham Brahimi's avatar
Hicham Brahimi committed
chemin = nomFichier.split("/")

log = open("log/"+chemin[1]+".log", "w")
f = None


try:
	pid = subprocess.Popen(["wvdial"])

	print("============ WVDIAL LANCE ==============")
	print("PID = ",pid.pid)

	time.sleep(10)

	print("============ CORRECTION ROUTE ==============")
	subprocess.Popen(["route", "add", "default", "dev", "ppp0"]) # Corrige la 4G au demarrage du raspberry


	print("============ CONNEXION ==============")
	server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
	server.connect((IP_PC, PORT))

	f = open(nomFichier, "rb")


	print("======== CALCUL TAILLE ========")
	taille = os.path.getsize(nomFichier)


	print("============ ENVOI FICHIER ==============")
	totalEnvoyee = 0

	with open(nomFichier, "rb") as f:
		totalEnvoyee += server.sendfile(f, 0)
		print("    => chunk %d/%d" % (totalEnvoyee, taille))
		log.write("    => chunk "+str(totalEnvoyee)+"/"+str(taille)+"\n")

	server.close()
except KeyboardInterrupt :
	print("============= LIBERATION =============")
	os.remove(".lockprocess")

	print("============ WVDIAL ARRET ==============")
	subprocess.Popen(["kill", "-1", pid.pid])


except Exception as ex:
	print("Exception, voir log")
	log.write(str(datetime.now())+" => Exception "+str(type(ex))+" ("+str(ex.args)+")\n")
	time.sleep(1)
	print("============= LIBERATION =============")
	os.remove(".lockprocess")

	print("============ WVDIAL ARRET ==============")
	subprocess.Popen(["kill", "-1", pid.pid])


print("================ FIN =================")
if f is not None:
	f.close()
	server.close()

log.close()

if check_pid(pid.pid):
	print("============ WVDIAL ARRET ==============")
	subprocess.Popen(["kill", "-1", str(pid.pid)])

time.sleep(1)
if os.path.isfile("./.lockprocess"):
	print("=========== LIBERATION ============")
	os.remove(".lockprocess")