在stderr中仍然有数据,而在sh中执行命令时不应该有数据

2024-09-28 22:22:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个本地执行命令的函数[1],但是我用函数hdfs dfs -cat /user/xubuntu/digests/output1-1444497943/part-m-00000.digest调用这个命令,在stdout中得到正确的输出,在stderr中得到log4j数据。我找不到执行是否成功运行,因为在stderr中获取了数据。如果执行成功,为什么要在stderr中获取数据?你知道吗

[1]本地执行的函数。 def executeCommand(命令):

  logging.debug("Executing: %s" % command)
  if "JAVA_HOME" not in os.environ:
    os.environ["JAVA_HOME"] = JAVA_HOME

  logging.debug("command: %s" % command)

  try:
    process = subprocess.Popen(shlex.split(command), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    out, err = process.communicate()
    if len(err) > 0:  # there is an exception
        raise ValueError("Exception:\n" + err)
  except ValueError as e:
    return e.message
  return out

[2]标准输出和标准输出

output in stdout: '{"mapreduce.file.input.name":"hdfs:\\/\\/hadoop-coc-1:9000\\/input1\\/b.txt","mapreduce.file.output.name":"\\/output1-1444497943\\/part-m-00000","mapreduce.digest":"1b344587f6c1398e7aaa59cd5f01b585"}'

output in stderr: '15/10/10 15:25:19 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable\n'

Tags: 函数inhomeoutputstderrstdouthdfsjava
1条回答
网友
1楼 · 发布于 2024-09-28 22:22:18

Hadoop将INFO及以上级别的所有消息记录到控制台的stderr。你知道吗

如前所述here

默认情况下,Hadoop将消息记录到Log4j。Log4j通过classpath上的Log4j.properties配置。此文件定义记录的内容和位置。对于应用程序,默认的根记录器是“INFO,console”,它将INFO及以上级别的所有消息记录到控制台的stderr。服务器登录到“INFO,DRFA”,它登录到每天滚动的文件。日志文件名为$HADOOP\u Log\u DIR/HADOOP-$HADOOP\u IDENT\u STRING-.Log。你知道吗

相关问题 更多 >