Python脚本未在sys.exit()上退出
这里没有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
退出
,退出
等。。
有什么建议吗
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)