Python脚本未在sys.exit()上退出

Python脚本未在sys.exit()上退出,python,python-3.x,Python,Python 3.x,这里没有sys.exit。我尝试过,退出,退出等。。 有什么建议吗 try: print ("Cloning Git Repo") os.system("git clone " + options.clone_url) except Exception as e: print ("Git Clone Failed") sys.exit(2) try: print ("Building Doc

这里没有sys.exit。我尝试过,
退出
退出
等。。 有什么建议吗

    try:
        print ("Cloning Git Repo")
        os.system("git clone " + options.clone_url)
    except Exception as e:
        print ("Git Clone Failed")
        sys.exit(2)

    try:
        print ("Building Docker Image")
        os.system("docker build -t " + options.image_tag + " -f " + repo_name + "/" + DOCKERFILE)
    except Exception as e:
        print ("Docker Build Failed", e)
        sys.exit(2)

    try:
        print ("Tagging Docker Image")
        os.system("docker tag " + options.image_tag + " " + PORTUS_REPO_URL + "/" + options.image_tag)
    except Exception as e:
        print ("Docker Tag Failed", e)
        sys.exit(2)
输出:

Cloning Git Repo
Cloning into 'xxx'...
git@git.hashedin.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
Building Docker Image
"docker build" requires exactly 1 argument.
See 'docker build --help'.

Usage:  docker build [OPTIONS] PATH | URL | -

Build an image from a Dockerfile
Tagging Docker Image
Error parsing reference: "http://portus.hashedin.com/nginx" is not a valid repository/tag: invalid reference format
Pushing Docker Image

从不引发异常,因为os.system未引发异常。请改用子流程

使用python3子流程使用您的代码,如下所示:


我用下面的代码找到了一个修复程序

    print("Building Docker Image")
    proc = subprocess.Popen(
        ['sudo', 'docker', 'build', '-t', options.image_tag, '.'])
    proc.wait()
    (stdout, stderr) = proc.communicate()
    if proc.returncode != 0:
        print("Docker Build Failed")
        sys.exit(2)

它工作得很好。

它也没有打印“Git clone failed!”,因此问题不在于
sys.exit()
,而在于您的脚本甚至没有达到这一点。Git Clone似乎产生了一个您无法捕获的内部错误。是什么让您认为
os.system()
会引发异常?当我阅读时,我希望返回一个整数。您必须使用模块
子流程中的函数来从
docker
获取退出代码,并使用它运行
sys.exit()
-请参阅ie。感谢您的评论,我已经解决了子流程的问题
    print("Building Docker Image")
    proc = subprocess.Popen(
        ['sudo', 'docker', 'build', '-t', options.image_tag, '.'])
    proc.wait()
    (stdout, stderr) = proc.communicate()
    if proc.returncode != 0:
        print("Docker Build Failed")
        sys.exit(2)