2
我試圖用subprocess.popen
在我的機器上運行命令。subprocess popen運行命令(HDFS/hadoop)
這是我迄今爲止
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)
如果我在終端運行命令我得到的
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}/*
它似乎並不像|
已被用來計算行數管在所有文件
相關:我如何使用subprocess.Popen通過管道多個進程連接(http://stackoverflow.com/q/295459/4279) – jfs