Python subprocess.wait()有多少种返回码

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

我对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.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,大小相同。谢谢