2015-01-16 2 views
0

이 조각을 계속합니다.서브 프로세스의 코드

스크립트의 각 루프에 대해 outputText를 실행하고 하위 프로세스가 완료되지 않은 경우 변경할 수있는 항목은 무엇입니까? 나는 결국 .wait()를 시도했지만 "int"객체로 오류가 발생했습니다. '통신'이라는 속성이 없습니다.

감사합니다. Chris.

편집 :

Ignoring profile '\\MachineName\C$\Users\UserName1' (reason: directory inclusion) 
Ignoring profile '\\MachineName\C$\Users\UserName2' (reason: directory inclusion) 

The following user profiles match the deletion criteria: 

\\MachineName\C$\Users\UserName3 

가있을 수 많은 선이 출력에 포함 :이 명령의 출력 중 하나 반복의 예입니다. 이것은에서 outputText에 서브 프로세스에서 하나를 stdout의 각 행을 삽입합니다

reply = subprocess.Popen(Command, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
for line in reply.stdout: 
    outputText.insert("end", line +"\n") 

:

+0

당신은'reply = subprocess.Popen (...). wait()'을 시도하셨습니까? 대신,'reply = subprocess.Popen (...)'을 그대로 사용하고,'reply.wait()'를 자신의 줄에 넣으십시오. ('wait '도이 상황에서 유용할지 모르겠지만 적어도 속성 오류를 고쳐야한다.) – Kevin

+0

Thanks @Kevin. 그것은 오류를 없애 버렸지 만, 당신 말이 맞습니다. 전혀 도움이되지 않았습니다. 롤. – user3514446

+0

그래서'Command'가 각 명령 행을 출력하기를 원합니다.'Command'가 끝난 후에 출력하는 것이 아니라 아직도 실행 중입니까? – dano

답변

2

오히려 Command 완료 될 때까지 차단됩니다 communicate를 호출하는 대신 직접 replystdout 속성을 반복 할 필요가 한 번, Command이 완료 될 때까지.

편집 :

다음

당신이 당신에 대해 얘기 "루프"와 함께 할하려는 일을하는 방법은 다음과 같습니다. 로직을 is_end_of_loop에 직접 추가해야합니다.

out = "" 
for line in reply.stdout: 
    out += line 
    if is_end_of_loop(line): 
     outputText.insert("end", out +"\n") 
     out = "" 
+0

감사합니다. @dano. 원래의 Q를 편집하여 명령 출력 예제를 포함 시켰습니다. 여기에는 여러 줄이 포함될 수 있습니다. 위 코드로 코드를 변경하면 명령 출력에서 ​​각 행에 대해 outputText 행을 실행합니다. 각 LOOP 명령에 대해서만 실행해야합니다. 나는 그것이 의미가 있기를 바랍니다. – user3514446

+0

다른 사람이 제안을하고 있습니까? ...? – user3514446

+0

@ user3514446 위 코드에서와 같이'reply.stdout'을 반복하고 싶지만 각 행에 대해'outText.insert'를 호출하는 대신 각 행을 변수에 추가해야합니다. 완성 된 루프가 있다는 것을 알아라. 각 줄을 파싱하고 루프의 마지막 줄로 식별하는 것이 무엇이든 찾아내는 것이 좋습니다. 코드 샘플에 대한 편집을 참조하십시오. – dano

관련 문제