i'm using subprocess
module execute 2 commands:
import shlex subprocess import check_call() def comm_1(error_file): comm = shlex("mkdir /tmp/kde") try: check_call(comm) except subprocess.calledprocesserror: error_file.write("error comm_1") def comm_2(error_file): comm = shlex("ls -la /tmp/kde") try: check_call(comm) except subprocess.calledprocesserror: error_file.write("error comm_2") if __name__ == "__main__": open("error_file", "r+") log_error_file: comm_1(log_error_file) comm_2(log_error_file) log_error_file.write("success")
i'm aware of few pitfalls in design, error_file
being shared functions. refactored, though. i'm trying detach entire process background. accomplish
check_call(comm, creationflags=subprocess.create_new_console)
but pose race problem, because want make sure comm_1
finished before comm_2
starts. best approach subprocess
? can't use python-daemon
or other packages outside standard python 2.6 library.
edit: try use like
nohup python myscript.py &
but ideia have 1 way start job python script.
you can check make sure process inside of comm_1
dies before starting subprocess call within comm_2
using wait()
. so, you're going have use popen()
instead of check_call()
.
from subprocess import popen def comm_1(error_file): comm = shlex("mkdir /tmp/kde") try: proc_1 = popen(comm) proc_1.wait(timeout=20) except subprocess.calledprocesserror, timeoutexpired: error_file.write("error comm_1")
proc_1.wait()
going wait 20 seconds (you can change time) process finish before continuing. if takes longer 20 secs, it's going throw timeoutexpired
exception, can catch in except
block.
Comments
Post a Comment