1 vorrei che il programma che viene avviato con subprocess.Popen non si avviasse la prima volta che viene eseguito lo script (per capirci, lo script lo esegue solo se esiste un file che viene creato solo dopo la prima eseguzione dello script)
E cosa non sai fare di preciso?
Usa os.path.exists() per verificare se il file esiste o meno.
Se non esiste lo crei ( open('nome_file', 'w') ) e forzi l'uscita con sys.exit().
Se esiste lanci la Popen e fai quello che devi fare.
2 vorrei che dopo 40 secondi fosse chiuso quel programma avviato con subprocess.Popen
Uhm... qui gia un po' più difficile.
Potresti killare il processo dato il pid. Non è molto elegante e perdi in portabilità ma cmq funziona.
Per Windows usando pywin32 (da installare a parte):
codice:
import subprocess
import time
import win32api
command = 'C:\\eseguibile.exe'
pipe = subprocess.Popen(command, stdout=subprocess.PIPE)
time.sleep(40)
win32api.TerminateProcess(int(pipe._handle), -1)
Per Windows usando ctypes (non devi installare nulla con python 2.5 o superiore):
codice:
import subprocess
import time
import ctypes
command = 'C:\\dc.exe'
pipe = subprocess.Popen(command, stdout=subprocess.PIPE)
time.sleep(40)
ctypes.windll.kernel32.TerminateProcess(int(pipe._handle), -1)
Per UNIX usando banalmente os.kill:
codice:
import subprocess
import time
import os
command = '/usr/bin/eseguibile'
pipe = subprocess.Popen(command, stdout=subprocess.PIPE)
time.sleep(40)
os.kill(int(pipe._handle))
Come si può mettere un tempo di timeout per uno script?
In che senso? time.sleep() non ti basta?
Come si fa un ciclo if basato sull'esistenza di un file?
codice:
import os
if os.path.exists('file'):
....
else:
....