如何获取GoDaddy IP更新脚本的返回码?out.txt内容解析咨询
关于GoDaddy域名IP更新脚本的返回码获取与out.txt内容疑问解答
一、如何获取脚本的执行返回码
不管是Python脚本本身,还是它调用的Bash脚本,我们都能拿到对应的返回码,分两种情况详细说明:
1. 在Python中获取Bash脚本的返回码
你当前用os.system()调用Bash脚本,这个函数返回的是子进程的原始状态值,不是直接的退出码。要拿到真实的返回码,需要用os.WEXITSTATUS()来解析:
# 替换原有的os.system调用,改成下面的写法 status = os.system('/home/pi/Desktop/godaddy_deneme/alo.sh "'+maindomain+'" "'+subdomain+'" "'+PublicIP+'"') exit_code = os.WEXITSTATUS(status) # 可以把返回码写入日志或用来生成运行报告 print(f"Bash脚本执行退出码: {exit_code}")
不过更推荐用Python的subprocess模块,它比os.system更灵活,能同时捕获返回码、标准输出和错误输出,更适合生成详细的运行报告:
import subprocess # 用列表传参更安全,避免引号转义问题 result = subprocess.run( ['/home/pi/Desktop/godaddy_deneme/alo.sh', maindomain, subdomain, PublicIP], capture_output=True, text=True # 让输出为字符串而非字节类型 ) # 获取Bash脚本的返回码 bash_exit_code = result.returncode print(f"Bash脚本返回码: {bash_exit_code}") # 还能获取脚本的输出内容,方便排查问题 print(f"Bash脚本标准输出: {result.stdout}") print(f"Bash脚本错误输出: {result.stderr}")
返回码的含义:0表示执行成功,非0值表示失败(比如curl连接错误、API验证失败等,不同错误对应不同的非0码)。
2. 获取Python脚本本身的返回码
如果要让Python脚本向调用它的进程(比如crontab)返回特定状态码,可以在脚本末尾用sys.exit()指定:
import sys # 示例:Bash脚本成功则Python返回0,失败返回1 if bash_exit_code == 0: sys.exit(0) else: sys.exit(1)
二、out.txt内容的原因解析
你看到的那些% Total % Received % Xferd...的内容,是curl的进度统计信息,原因如下:
- curl默认会把进度条/统计信息输出到标准错误(stderr),而非标准输出(stdout)。
- 你的Bash脚本里用了
>>/home/pi/Desktop/godaddy_deneme/out.txt 2>&1,这个命令的意思是:把标准输出追加到out.txt,同时把标准错误重定向到和标准输出相同的位置(也就是out.txt)。 - 因此curl的进度统计信息就被一起写入了out.txt。
如果不想记录这些进度信息,可以给curl加上-s(静默模式)参数,关闭进度输出:
# 修改Bash脚本中的curl命令,添加-s参数 curl -s -X PUT https://api.godaddy.com/v1/domains/${maindomain}/records/A/${subdomain} \ -H "accept: application/json" \ -H "Content-Type: application/json" \ -H "Authorization: sso-key ${Key}:${Secret}" \ -d "[ { \"data\": \"${PublicIP}\", \"ttl\": 600 }]" \ >>/home/pi/Desktop/godaddy_deneme/out.txt 2>&1
如果想保留错误信息但关闭进度,可以用-sS(静默但显示错误)参数,这样只有错误信息会被写入out.txt,进度统计会被屏蔽。
内容的提问来源于stack exchange,提问作者Harun Reşit Ç
相关产品推荐
相关产品推荐

