[HADOOP] / 빈 / SH : 행 62 :에 : 명령을 찾을 수 없습니다
HADOOP/ 빈 / SH : 행 62 :에 : 명령을 찾을 수 없습니다
내가 쉘 명령을 호출하고있는 파이썬 코드가 있습니다. 내가 쉘 명령은 한 코드의 일부 :
try:
def parse(text_list):
text = '\n'.join(text_list)
cwd = os.getcwd()
os.chdir("/var/www/html/alenza/hdfs/user/alenza/sree_account/sree_project/src/core/data_analysis/syntaxnet/models/syntaxnet")
synnet_output = subprocess.check_output(["echo '%s' | syntaxnet/demo.sh 2>/dev/null"%text], shell = True)
os.chdir(cwd)
return synnet_output
except Exception as e:
sys.stdout.write(str(e))
내가 몇 가지 예제 입력이 로컬 파일에이 코드를 실행하면 이제 (내가 그랬어 고양이 /home/sree/example.json가 | 파이썬 parse.py)가 잘 작동하고 내가 필요한 출력을 얻을. 하지만 정확히 포함 JSON 항목의 동일한 유형 내 HDFS의 입력과 코드를 (같은 cat 명령 만 입력 파일 경로가 HDFS에서이다)를 실행하려고하고 그것은 오류와 함께 실패합니다 :
/bin/sh: line 62: to: command not found
list index out of range
내가 스택 오버플로에서 비슷한 질문을 읽고 솔루션은 호출되는 쉘 스크립트의 오두막 라인을 포함하는 것이었다. 나는 오두막 호선을해야합니까! demo.sh 스크립트는 / usr / 빈 / bash는.
또한, 어떤 bash는 것은는 / usr / 빈 / bash에 있습니다.
누군가가 정교하시기 바랍니다.
해결법
-
==============================
1.당신은 거의 경우 지금까지, 쉘 = True를 가진리스트 인수를 전달 결합하려는 없습니다. 그냥 문자열을 전달 :
당신은 거의 경우 지금까지, 쉘 = True를 가진리스트 인수를 전달 결합하려는 없습니다. 그냥 문자열을 전달 :
synnet_output = subprocess.check_output("echo '%s' | syntaxnet/demo.sh 2>/dev/null"%(text,), shell=True)
그러나, 당신은 정말 여기 쉘 파이프 라인이 필요하지 않습니다.
from subprocess import check_output from StringIO import StringIO # from io import StringIO in Python 3 synnet_output = check_output(["syntaxnet/demo.sh"], stdin=StringIO(text), stderr=os.devnull)
-
==============================
2.일부 특수 문자는 내가 demo.sh.에 입력 된 텍스트 문자열에 나타나는 문제가 발생했습니다 나는 demo.sh. 해당 파일의 내용을 임시 파일에 텍스트를 저장하고 전송하여이 문제를 해결
일부 특수 문자는 내가 demo.sh.에 입력 된 텍스트 문자열에 나타나는 문제가 발생했습니다 나는 demo.sh. 해당 파일의 내용을 임시 파일에 텍스트를 저장하고 전송하여이 문제를 해결
그건:
try: def parse(text_list): text = '\n'.join(text_list) cwd = os.getcwd() with open('/tmp/data', 'w') as f: f.write(text) os.chdir("/var/www/html/alenza/hdfs/user/alenza/sree_account/sree_project/src/core/data_analysis/syntaxnet/models/syntaxnet") synnet_output = subprocess.check_output(["cat /tmp/data | syntaxnet/demo.sh 2>/dev/null"%text], shell = True) os.chdir(cwd) return synnet_output except Exception as e: sys.stdout.write(str(e))
from https://stackoverflow.com/questions/39619221/bin-sh-line-62-to-command-not-found by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 다른 하이브 테이블에서 하나 개의 하이브 테이블을 새로 고침 (0) | 2019.10.19 |
---|---|
[HADOOP] 무한 EMR에 loopin S3-distcp 및 하둡 distcp 작업 (0) | 2019.10.19 |
[HADOOP] 선택 스파크 및 별명에 열을 추가 (0) | 2019.10.19 |
[HADOOP] 자바 코드에서 하이브를 site.xml의 위치를 찾기 (0) | 2019.10.19 |
[HADOOP] 방법) (루프의 텍스트들 사이에서 반복하고 맵리 듀스에서 특정 문자의 수를 찾을 수 (0) | 2019.10.19 |