J'ai un morceau de code python, que j'ai besoin de le convertir en perl, mais malheureusement je ne suis pas bon en perl, donc désolé si la question est simple. Je voudrais vérifier STDOUT et STDERR pour un mot spécifique. Voici le code python:Python code à Perl
p = subprocess.Popen("bmod -b " + beginTime + " " + job_id + "; exit 1;",
stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
while p.poll() is None:
err = p.stderr.readline().decode('utf_8')
out = p.stdout.readline().decode('utf_8')
if "changed" in err or "changed" in out:
subprocess.Popen("echo rescheduling was successful!", shell=True)
os._exit(0)
J'ai lu quelques documentations et fonction open3 peuvent travailler, mais pour une partie de p.poll() Je ne sais pas quoi utiliser.
Il existe plusieurs façons de lire la sortie d'un processus externe en Perl, mais les plus simples sont ['qx()'] (http://perldoc.perl.org/perlop.html#qx%2f_STRING_%2f), [piped 'open'] (http://perldoc.perl.org/perlipc .html # Using-open% 28% 29-pour-IPC), et [Capture :: Tiny] (https://metacpan.org/pod/Capture::Tiny). Pour 'qx' et' open' vous devrez rediriger STDERR puisque vous voulez vérifier STDOUT et STDERR. – ThisSuitIsBlackNot
'open3' +' select' est trop bas. Utilisez 'run3' d'IPC :: Run3 ou' run' d'IPC :: Run. – ikegami
@ikegami Dois-je utiliser quelque chose comme ça pour attendre la sortie? '$ pid = run3' ou' $ pid = open3' 'wait ($ pid, 0)' –