0
我試圖讓下面的shell命令的輸出在我的python腳本,蟒蛇subprocess.Popen VS os.popen
hadoop fs -ls /projectpath/ | grep ^d | grep -v done | head -1 | awk {'print $8'}
我能順利通過os.popen
得到的輸出如下:
import os
cmd = "hadoop fs -ls /projectpath/ | grep ^d | grep -v done | head -1 | awk {'print $8'}"
p = os.popen(cmd,"r")
while 1:
line = p.readline()
if not line: break
print line
但os.popen()
自python 2.6以來已棄用,所以我想用subprocess.Popen()
函數替換上面的代碼片段。
但是,下面的subprocess.Popen()
的代碼片段給出了與上面的代碼片段不同的結果。
import subprocess as sub
import shlex
cmd = "hadoop fs -ls /projectpath/ | grep ^d | grep -v done | head -1 | awk {'print $8'}"
args = shlex.split(cmd)
p = sub.Popen(args,stdout=sub.PIPE,stderr=sub.PIPE)
output, errors = p.communicate()
print output
以上命令只給出了'hadoop fs -ls /projectpath/'
部分命令的輸出。 我曾嘗試諮詢subpocess.Popen()
的幾個參考文獻(http://docs.python.org/2/library/subprocess.html#popen-objects,Python, os.system for command-line call (linux) not returning what it should?),但無法讓它在字符串cmd中執行命令。任何人都可以指出我做錯了什麼?
作品。謝謝。 – rohanag