[HADOOP] subprocess.check_output () 모듈 객체의 속성이 'check_output'입니다.
HADOOPsubprocess.check_output () 모듈 객체의 속성이 'check_output'입니다.
하위 프로세스 라이브러리를 가지고 놀고 있습니다. 나는 수행 할 수있다.
v = subprocess.check_output ( "ls")
그리고 그것은 잘 작동합니다. 그러나, 내가 기계로 SSH하고 hadoop 명령을 수행하고자 할 때,
v = subprocess.check_output ( "hadoop fs -ls / path / to / file * | grep -oE '/(.*)'")
나는 얻다
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'check_output'
왜 확실하지. 하위 프로세스에 대한 이해가 부족한 것 같습니다. 이 오류를 어떻게 해결할 수 있습니까?
해결법
-
==============================
1.check_output은 파이썬 2.7에서 소개되었으므로 <2.7에서는 작동하지 않습니다.
check_output은 파이썬 2.7에서 소개되었으므로 <2.7에서는 작동하지 않습니다.
Popen과 의사 소통을 통해 출력물을 얻을 수 있습니다.
from subprocess import PIPE,Popen proc = Popen(['ls', '-l'], stdout=PIPE) print(proc.communicate()[0].split())
문서의이 부분은 유용 할 수 있습니다.
-
==============================
2.다음은 파이썬 2.6 용 subprocess.check_output 함수의 제 버전입니다. 그리고 습관적인 명령 인터페이스와 함께 파이프 라인을 지원합니다.
다음은 파이썬 2.6 용 subprocess.check_output 함수의 제 버전입니다. 그리고 습관적인 명령 인터페이스와 함께 파이프 라인을 지원합니다.
import subprocess def check_output(cmd): """ https://docs.python.org/2/library/subprocess.html#subprocess.Popen Implementation subprocess.check_output() for Python 2.6 """ process_list = [] cmd_list = cmd.strip().split("|") for i, sub_cmd in enumerate(cmd_list): STDIN = None if i > 0: STDIN = process_list[i - 1].stdout process_list.append(subprocess.Popen(sub_cmd, stdin=STDIN, stdout=subprocess.PIPE, shell=True)) if len(process_list) == 0: return '' output = process_list[i].communicate()[0] return output
시험 통화 :
print check_output('ls -la /var | grep log')
산출:
-
==============================
3.padraic-cunningham, 당신의 대답은 저에게 거기있는 길을 얻었습니다. 제 경우에는 명령이 SSH 명령입니다. 통신이 조기에 프로세스를 죽이기 때문에 (EOF 문자를 읽 자마자) 다음과 같은 결과가 더 좋아졌습니다.
padraic-cunningham, 당신의 대답은 저에게 거기있는 길을 얻었습니다. 제 경우에는 명령이 SSH 명령입니다. 통신이 조기에 프로세스를 죽이기 때문에 (EOF 문자를 읽 자마자) 다음과 같은 결과가 더 좋아졌습니다.
import subprocess def check_output(command_list): proc = subprocess.Popen(command_list, stdout=subprocess.PIPE) proc.wait() return proc.stdout.read()
from https://stackoverflow.com/questions/26894024/subprocess-check-output-module-object-has-out-attribute-check-output by cc-by-sa and MIT license