我正在python中运行代码,该代码计算目录中存在的文件数
hadoop fs -count /user/a909983/sample_data/ | awk '{print $2}'
这会成功在linux命令行中返回 0 ,因为目录为空。但是,当我在python脚本中运行它时,它会返回 1 python中的代码行是:
directoryEmptyStatusCommand = subprocess.call(
["hadoop", "fs", "-count", "/user/a909983/sample_data/", "|", "awk '{print $2}'"])
我该如何纠正?还是我想念什么?我也尝试过使用Popen,但是结果是一样的。
答案 0 :(得分:3)
使用subprocess.Popen
并且不要使用管道|
,因为它需要shell=True
带来哪些安全风险。因此,请使用subprocess.PIPE
并将其与subprocess.check_output
一起使用,而无需使用管道,这就是正确的方法。
因此,您可以尝试以下操作:
command = subprocess.Popen(("hadoop", "fs", "-count", "/user/a909983/sample_data/") , stdout=subprocess.PIPE)
output = subprocess.check_output(("awk '{print $2}'"), stdin=command.stdout)
如果您想通过启用shell=True
来尝试Shell命令:
cmd = "hadoop fs -count /user/a909983/sample_data/ | awk '{print $2}'"
command = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
output = command.communicate()[0]
print(output)