关于shell:如何使用python脚本存储返回值和NOT命令调用状态?

how to store return value and NOT command call status using python script?

我试图使用python脚本测试hadoop中是否存在路径。

hdfs dfs -test -e /path/to/file

如果路径存在,上面将返回0,如果路径不存在,则返回1。 下面是我的python脚本:

1
2
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)的返回值,也没用。

以下是我的完整代码:

1
2
3
4
5
6
7
8
9
10
11
12
#!/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")


run_commands更改为

1
2
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将不会成立。