2012-12-04 7 views
2

지금 당장 혼란스러워합니다. 다음pexpect 및 셸 메타 문자 (>, | 또는 *)

pexpectdocumentation 상태 : 내가 |pexpect.sendline(some command | grep 'something')에서 *를 사용하는 오래된 코드를 찾고 있어요 그러나

Remember that Pexpect does NOT interpret shell meta characters such as 
redirect, pipe, or wild cards (>, |, or *). This is a common mistake. 
If you want to run a command and pipe it through another command then 
you must also start a shell. For example:: 

child = pexpect.spawn('/bin/bash -c "ls -l | grep LOG > log_list.txt"') 
child.expect(pexpect.EOF) 

. 그래서 나는이 명령을 테스트하기 시작했으며 모두 작동하는 것처럼 보입니다. 나는 또한 수정 된 pexpect 모듈을 사용하지 않는다는 것을 언급 할 가치가있다. 파이썬을위한 오래된 오래된 pexpect이다.

어째서? 왜 pexpect메타 문자가 작동하지 않는다고 말하면 분명히일까요?

+0

코드는'pexpect.sendline()'에 무엇을 전달합니까? – ecatmur

+0

@ecatmur, 특정 기계 명령. 일반적으로 | grep 명령 또는 | 및 *. 위의 수정 된 코드를 참조하십시오. – theAlse

답변

3

pexpect.spawn 쉘 메타 문자를 해석하지 않지만, (아마도 쉘) 명확하지 pexpect 내에서 실행중인 어떤 :

child = pexpect.spawn('/bin/bash') 
child.sendline('echo hello | cat') 

pexpect 그냥 자식 프로세스에 문자열을 전달한다; 그것을 해석하는 것이 아닙니다.

+0

"Pexpect는 쉘 메타 문자를 해석하지 않습니다"라고 말했기 때문에 문서가 실제로 명확하지 않습니다. – theAlse

+0

@theAlse right, pexpect는 메타 문자를 해석하지 않습니다. 변경되지 않은 상태로 자식 프로세스로 곧바로 전달됩니다. 자식 프로세스가이를 해석하고 있습니다. – ecatmur

+0

하지만 나는 다른 것을보고, 당신은 실제로 배시를 시작하고있다! 하지만 제 경우에는 bash를 제공하지 않는 임베디드 머신에 연결합니다. 이것은 ssh/telnet과 grep (bash가 없음)과 같은 다른 명령을 통해 수신 된 특수 명령을 해석 할 수있는 쉘입니다. – theAlse