Ho uno script python 'b.py' che stampa il tempo ininterrottamente in 5 sec.Come posso chiamare uno script python da uno script python
while (1):
print "Start : %s" % time.ctime()
time.sleep(5)
print "End : %s" % time.ctime()
time.sleep(5)
E nella mia a.py, mi chiamano b.py da:
def run_b():
print "Calling run b"
try:
cmd = ["./b.py"]
p = subprocess.Popen(cmd,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
for line in iter(p.stdout.readline, b''):
print (">>>" + line.rstrip())
except OSError as e:
print >>sys.stderr, "fcs Execution failed:", e
return None
e più tardi, Io uccido 'b.py' da: PS_PATH = "/ usr/bin/ps -efW "
def kill_b(program):
try:
cmd = shlex.split(PS_PATH)
retval = subprocess.check_output(cmd).rstrip()
for line in retval.splitlines():
if program in line:
print "line =" + line
pid = line.split(None)[1]
os.kill(int(pid), signal.SIGKILL)
except OSError as e:
print >>sys.stderr, "kill_all Execution failed:", e
except subprocess.CalledProcessError as e:
print >>sys.stderr, "kill_all Execution failed:", e
run_b()
time.sleep(600)
kill_b("b.py")
Ho 2 domande. 1. perché non vedo alcuna impronta da "b.py" e quando faccio "ps -efW" non vedo un processo chiamato "b.py"? 2. Perché quando uccido un processo come sopra, vedo "l'autorizzazione rifiutata"?
Sto eseguendo lo script sopra cygwin sotto Windows.
Grazie.
Inception python – Nick
un modo più semplice per uccidere 'b.py' è restituire' p' da 'run_b()' prima di iniziare a leggere l'output di 'b.py' e chiamare' p.kill(); p.wait() 'più tardi. – jfs
controlla che './B.py' sia avviato con successo (' p.poll() 'dovrebbe essere' None') – jfs