如何使用python脚本存储返回值而不是命令调用状态?

jvlzgdj9  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(321)

我正在尝试使用python脚本测试hadoop中是否存在路径。 hdfs dfs -test -e /path/to/file 如果路径存在,则返回0;如果路径不存在,则返回1。下面是我的python脚本:

if subprocess.call("hdfs dfs -test -e /path/to/file", shell = True) == 0:
    # do something

上面的代码它不工作,子进程总是0 b/c它检查的是命令状态而不是返回值。我找到了这个帖子,但似乎不起作用。我还尝试存储echo的返回值 result = subprocess.call("echo $?", shell = True) ,也没用。
以下是我的完整代码:


# !/usr/bin/env python

import subprocess

HDFS = "hdfs dfs "

def run_commands(func, path):
    subprocess.call(HDFS + func + path, shell = True)

def path_exist(path):
    return True if run_commands("-test -e ", path) == 0 else False

path_exist("/path/to/file")
cbjzeqam

cbjzeqam1#

改变 run_commands

def run_commands(func, path):
    return subprocess.call(HDFS + func + path, shell = True)
``` `run_commands` 不会自动从返回代码 `subprocess.call` . 它会回来的 `None` . (在python 2.6.6中测试)。
正因为如此, `if run_commands("-test -e ", path) == 0` 不会是真的。

相关问题