하이브 CLI에서 발생하는 메시지를 표준 오류로 플러시 할 수 있는지 궁금합니다. 현재 내가 다단계 쿼리를 실행하려고 (단지 샘플이 아닌 실제) :파이썬에서 stderr로 다단계 작업을 플러시 오류가 발생합니다.
SELECT COUNT(*) FROM (
SELECT user from users
where datetime = 05-10-2013
UNION ALL
SELECT user from users
where datetime = 05-10-2013
) a
이 작업 한이 살해되기 때문에, 내가 실행하지 않으 실패하지만 경우, 3 작업을 시작합니다 job 2. 현재 내 코드는 다음과 같습니다.하지만 모든 하위 쿼리가 완료 될 때까지 하이브가 stderr에 쓰지 않고 오류를 반환합니다.
def execute_hive_query(query):
return_code = None
cmd = ["hive", "-e", query]
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
while return_code is None:
out = proc.stdout.read()
error = proc.stderr.read()
handle_hive_exception(out,error)
time.sleep(10)
return_code = proc.poll()
def handle_hive_exception(stdout,stderr):
if stderr != '':
raise Exception(stderr)
고마워요!
'.stdout.read()'는 서브 프로세스가 종료 될 때까지 발생하는 stdout을 닫을 때까지 차단합니다. [스레드, select.select 또는 fctnl 등] (http://stackoverflow.com/q/375427/4279)을 사용하여 구현할 수있는 비 차단 읽기가 필요합니다. 또한 [블록 버퍼링 문제] (http://stackoverflow.com/a/12471855/4279)가 발생할 수 있습니다. – jfs