2016-10-04 2 views
0

나는 파이썬에서 다음 2 개의 명령을 하나씩 시도하고있다.파이썬에서 순차적으로 서브 프로세스 실행

runmqsc <Queuem manager name> 
Display QL (<queue name>) 

하위 프로세스를 사용하여 rumqsc 명령을 실행할 수 있습니다.

subprocess.call("runmqsc <queue manager name>", shell= True) 

이제이 명령은 python에서 컨트롤을 가져 오는 것과 같습니다. 하위 프로세스를 사용하여 다음 명령을 실행하려고하면 예상대로 작동하지 않습니다. 두 번째를 실행하는 방법을 모르겠습니다 (인수를 전달해야 함).

코드 조각을 추가 :

subprocess.call("runmqsc Qmgrname", shell= True) 
subprocess.call("DISPLAY QL(<quename>)",shell=True) 

이제 첫 번째 줄은 잘 실행하고 주석 runmqsc에 tdelaney에서 언급 한 바와 같이 표준 입력에서 입력을 기다립니다. 그리고 첫 번째 줄을 실행 한 후에도 두 번째 줄을 실행하지 않고 프로그램이 멈 춥니 다.

관련 문서에 대한 도움이나 참고 자료가 도움이됩니다. 감사

유닉스, 리눅스 또는 윈도우에
+0

명령 줄에서이 작업을 수행 할 수 있습니까? – tdelaney

+0

Runmqsc는 stdin에서 명령을받습니다. stdin을 파이프로 리디렉션하지 않거나 프로그램을 실행할 때 명령을 수동으로 입력하지 않으면 응답이 중지되고 호출이 반환되지 않습니다. 명령을 어땠는지 보여주는 작은 스크립트를 게시하여 수정 사항을 제안 할 수 있습니까? – tdelaney

+0

@tdelaney : 예, 명령 줄에서 명령을 실행할 수 있습니다 (즉, 하위 프로세스를 사용하지 않음). 명령을 차례대로 실행하려고합니다.수정 된 질문을 찾으십시오. (코드 스 니펫으로 질문을 업데이트했습니다.) 감사합니다. – Phoenix

답변

0

당신은 돈 '

'some_mq_cmds.mqsc '파일에서
runmqsc QMgrName <some_mq_cmds.mqsc> some_mq_cmds.out 

,처럼 MQSC 명령을 넣어 순차적으로 명령을 서브 프로세스로 실행하려고하지 않습니다. 명령 줄에서 runmqsc을 실행하면 stdin 이상을 입력하고 입력 한 명령을 실행 한 다음 지시 할 때 마침내 종료합니다. the docs :

키보드에서 stdin을 가져 와서 대화식으로 MQSC 명령을 입력 할 수 있습니다. 파일에서 입력을 리디렉션하면 파일에 자주 사용되는 시퀀스를 실행할 수 있습니다. 출력 보고서를 파일로 리디렉션 할 수도 있습니다.

하지만 세 번째 방법이 있다고 생각합니다. runmqsc을 시작하고 stdin에 명령을 작성한 다음 stdin을 닫으십시오. 명령을 실행하고 종료해야합니다. Popen.communicate이이 작업을 수행합니다. 출력을 캡처하고 싶은지는 모르겠지만이 예제에서는 화면으로 보내 게 할 것입니다.

python3에서
# start msg queue manager 
mqsc = subprocess.Popen(["runmqsc", "QMAGTRAQ01"], stdin=subprocess.PIPE, 
    stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
# pass command(s) to manager and capture the result 
out, err = mqsc.communicate("DISPLAY QL(BP.10240.012.REQUEST)") 
# wait for command to complete and deal with errors 
retcode = mqsc.wait() 
if retcode != 0: 
    print("-- ERROR --") # fancy error handling here 
print("OUTPUT: ", out) 
print() 
print("ERROR: ", err) 

, outerrbytes 오브젝트 아닌 문자열이다. 텍스트 파일을 읽을 때 인코딩을 사용하는 것과 비슷하게 프로그램에서 사용하는 언어에 따라 디코딩해야 할 수도 있습니다. 파일이 UTF8이라고 가정하면

out = out.decode('utf-8') 
+0

고맙습니다. 완벽하게 작동합니다. mqsc.communicate()의 출력을 어떻게 잡을 수 있는지 안내해 주시겠습니까? 추가 요청으로 Subprocess를 자세히 살펴볼 수있는 몇 가지 링크를 제안하십시오. – Phoenix

+0

캡처/오류 수정 코드가 추가되었습니다. 대답의 Popen.communicate 링크는 자세한 내용은 파이썬 하위 프로세스 문서로 이동합니다. – tdelaney

+0

모든 도움에 감사드립니다. – Phoenix

0

, 당신은 간단하게 수행 할 수 있습니다

DISPLAY QL("TEST.Q1")