Why is python no longer waiting for os.system to finish?

大兔子大兔子 提交于 2019-11-28 12:23:54

os.system does wait. But there could be an error in the program called by it, so the file isn't created. You should check the return value of the called program before proceeding. In general, programs are supposed to return 0 when they finish normally, and another value when there is an error:

if os.system(str(cline)):
    raise RuntimeError('program {} failed!'.format(str(cline)))
blast_out=open(type+".BLAST")

Instead of raising an exception, you could also return from the Blast function, or try to handle it in another way.

Update: Wether the called program runs fine from the command line only tells you that there is nothing wrong with the program itself. Does the blast program return useful errors or messages when there is a problem? If so, consider using subprocess.Popen() instead of os.system, and capture the standard output as well:

prog = subprocess.Popen(cline, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = prog.communicate()
# Now you can use `prog.returncode`, and inspect the `out` and `err` 
# strings to check for things that went wrong.

You could also replace the call to os.system with subprocess.check_call, and that will raise an exception if the command fails:

import subprocess as subp
subp.check_call(str(cline), shell=True)

This answer is a bit late. However, I had the same problem and subprocess didn't seem to work. I solved it by writing the command into a bash-file and executing the bash-file via python os.system:

vi forPython.sh (write 'my command' into it)
chmod +x forPython.sh

(in Python script)

os.system("./forPython.sh")

This makes python wait for your process to finish.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!