Python subprocess.wait()有多少种返回码
我对python文件非常困惑,它用于将文件从服务器复制到hadoop 命令是:Python subprocess.wait()有多少种返回码,python,hadoop,subprocess,Python,Hadoop,Subprocess,我对python文件非常困惑,它用于将文件从服务器复制到hadoop 命令是:hadoop fs-put/localhost/*/hadoop/* 代码是: cmd = exc_path + ' ' + 'fs -put' + ' ' + src_path + item + ' ' + dst_path process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE) code = process.wa
hadoop fs-put/localhost/*/hadoop/*
代码是:
cmd = exc_path + ' ' + 'fs -put' + ' ' + src_path + item + ' ' + dst_path
process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
code = process.wait()
logfile.info('type(code) is %s, code is %s\n', type(code), code)
在过去的几天里,它运行正常。但是前天它返回了code=0
然后昨天,它运行正常,code==0
,然后今天它失败并返回:type(code)is,code是255
文档说wait()
应该返回0或无,那么为什么我会得到255?hadoop的cmd'put'应该返回0(成功时)和-1(失败时)
我发现了一些有用的信息:
“遗憾的是,当使用shell=True运行子进程时,wait()只会等待sh子进程完成,而不会等待命令cmd。”返回码255表示Hadoop进程退出时返回了
-1
返回码(原因我不知道)
wait()
没有给出-1的原因是,当子进程由于信号而退出时(如果它由于信号11而退出,那么返回代码应该是-11)。返回代码255表示Hadoop进程退出时带有-1
返回代码(我不知道为什么)
wait()
没有给出-1的原因是,当子进程由于信号而退出时,会保留负数(如果它由于信号11而退出,则返回代码为-11)
文档说wait()应该返回0或无,但为什么我会得到255
这是错误的。文件说:
等等
等待子进程终止。设置并返回returncode属性
及
返回码
子返回代码,由poll()和wait()设置(间接由communicate()设置)。
None值表示进程尚未终止。
负值-N表示子级被信号N终止(仅限Unix)
如果命令以非零exitcode退出,则您将获得它
hadoop的cmd'put'应该返回0(成功时)和-1(失败时)
关于为什么会得到255
而不是-1
的这个解释非常简单,已经解释过了。基本上,这是由于Java允许有符号的32位值作为退出代码(-1)而Posix退出状态是无符号的8位值
总之,非零退出代码将告诉您命令失败。如果要检查特殊退出代码,则当代码不在0-255范围内时,必须特别小心
文档说wait()应该返回0或无,但为什么我会得到255
这是错误的。文件说:
等等
等待子进程终止。设置并返回returncode属性
及
返回码
子返回代码,由poll()和wait()设置(间接由communicate()设置)。
None值表示进程尚未终止。
负值-N表示子级被信号N终止(仅限Unix)
如果命令以非零exitcode退出,则您将获得它
hadoop的cmd'put'应该返回0(成功时)和-1(失败时)
关于为什么会得到255
而不是-1
的这个解释非常简单,已经解释过了。基本上,这是由于Java允许有符号的32位值作为退出代码(-1)而Posix退出状态是无符号的8位值
总之,非零退出代码将告诉您命令失败。如果要检查特殊退出代码,当代码不在0-255范围内时,必须特别小心。非常感谢!事实上,我可以知道hadoop的cmd'put'返回-1的情况吗?我已经检查过文件是否从服务器上传到hadoop,大小相同。谢谢非常感谢你!事实上,我可以知道hadoop的cmd'put'返回-1的情况吗?我已经检查过文件是否从服务器上传到hadoop,大小相同。谢谢