【发布时间】:2015-12-22 00:14:50
【问题描述】:
我正在尝试使用subprocess.popen 在我的机器上运行命令。
这是我目前所拥有的
cmdvec = ['/usr/bin/hdfs', 'dfs', '-text', '/data/ds_abc/clickstream/{d_20151221-2300}/*', '|', 'wc', '-l']
subproc = subprocess.Popen(cmdvec, stdout=subprocess.PIPE, stdin=None, stderr=subprocess.STDOUT)
如果我在终端中运行命令,我会得到 p> 的输出
15/12/21 16:09:31 INFO lzo.GPLNativeCodeLoader: Loaded native gpl library
15/12/21 16:09:31 INFO lzo.LzoCodec: Successfully loaded & initialized native-lzo library [hadoop-lzo rev 9cd4009fb896ac12418449e4678e16eaaa3d5e0a]
15/12/21 16:09:31 INFO compress.CodecPool: Got brand-new decompressor [.snappy]
15305
数字15305 是我想要的值。
当我通过拆分命令并将其转换为列表来运行命令时,我这样做是为了尝试获取行:
for i in subproc.stdout:
print(i)
但是,这给了我数据,就好像运行了这个命令一样,因为正在显示文件中的所有数据。
/usr/bin/hdfs dfs -text /data/ds_abc/clickstream/{d_20151221-2300}/*
似乎没有使用管道| 来计算所有文件中的行数
【问题讨论】:
标签: python hadoop subprocess popen