2014-11-19 5 views
1

다음 작업을 수행하는 라이브러리를 찾을 수 없으므로 직접 작성하기 시작했습니다. 나는 어떤 문제에 대한 해결책을 찾을 수 없지만 누군가가 제안을하기를 바랍니다.원격 셸 명령을 보내고 출력을 검색합니다.

내가 원하는 것은 이것입니다. ls -al <some path>과 같은 일반 셸 명령을 보내고 그 명령을 쓸 때 터미널 에뮬레이터에 나타나는 것과 같은 방식으로 출력 (stdout 및 stderr)을 원합니다. 캐치는 내가 현재 사용하고있는 컴퓨터에서이 셸 명령을 실행하고 싶지 않지만 ssh 또는 직렬 연결을 통해 원격으로 셸 명령을 실행하고 싶습니다. 다른 말로하면 ls -al <some path> 2>&1 >/tmp/out으로 전화 할 때 중단이나 변경없이 /tmp/out의 내용을 원격으로 받고 싶습니다.

문제는 직렬 연결로 항상 라이브러리 선택에 따라 ssh 연결을 사용하여 출력에 \x1b[K과 같은 터미널 명령 문자가 혼합되어 발생한다는 것입니다. 나는 현재 이들 명령을 정확하게 생성하고있는 것이 무엇인지, 왜 그것들을 이미 소비하고 있는지, 그리고 내가 어떻게 그들 자신을 모두 소비하는지에 관해 알지 못한다. (많이있다, 순진한 접근법은 작동하지 않을 것이다) .

출력에 특수 문자를 가져 오는 것이 왜 문제가됩니까? 출력 결과에 ala if expected_output == output 문자열이 있거나 적어도 정규 표현식을 사용하는 경우 Python 코드를 비교하려고합니다. 그러나이 등장 인물이 언제 그리고 왜 등장하는지에 관해선 정기적 인 것이 없습니다. 때로는 ls -al <something>과 같은 아주 간단한 명령으로 인해 전체 ssh 연결이 끊어 질 수 있습니다 (이러한 문자로 인해서 발생하지만, 문제에 대해 이해하기에 충분하지 못하기 때문에 적어도 확실합니다).

명령을 원격으로 보내고 결과를받는 궁극적 인 목표를 해결하는 방법에 대해 알려주십시오. 언급 된 하위 문제들 중 하나를 해결할 수 있습니까? (예 : 터미널이 될 것처럼 말하면서 ssh 연결을하고, 해석하지 않고 임의로 나타나는 특수 문자를 사용합니다)?

추신 : 제가 이미 시도한 많은 것들이 있지만, 글을 쓰는 동안 나는 그들을 너무 많이 발견하여 여기에 모두 나열했습니다. 원하는 결과를 이끌어 낼 수있는 것은 없습니다. 이것은 실제로는 꽤 복잡한 문제입니다. 특히 추적 가능한 것이 아닌 것 (실제로 얼마나 많은 (pseudo) 터미널이 실제로 연관되어 있는지)과 다른 것들은 문서화되지 않았습니다 (터미널 처리 중 일부는 한 번에 나온 것 같습니다. 실제 타자기가 컴퓨터에 연결된 곳).

답변

1

당신은 이미

Pexpect library.Try

의이 유형을 가지고있다.

연결하려는 컴퓨터에 ssh 연결을 만들어 pexpect 하위를 생성하면됩니다. 그러면 .before 기능을 사용하여 명령을 보내고 출력을 볼 수 있습니다.

예 :

child = pexpect.spawn('ssh [email protected]') 
child.expect ('Password:') 
child.sendline (mypassword) 
child.expect('#') # or expect `$`. 
child.sendline('<your command>') 
child.expect('#') 
print child.before 

참조 : 그것을 사용 havent 한 비록 http://pexpect.sourceforge.net/pexpect.html

P.S 같은 대 Paramiko있다.

+0

안녕하세요, 그렇습니다. 내가 pexpect에서 기대했던 것입니다. 그러나 명령 문자를 제거하지는 않습니다. [보세요] (https://github.com/pexpect/pexpect/issues/137) – erikbwork

+1

@ erikb85 당신이 보낸 명령을 알고 있습니다. 검색 한 후에 빈 문자열로 바꾸는 쉬운 작업입니다. 간단한 str.replace(). – vks

+0

그런 것이 하나뿐입니다.많은 것이 있고, 그들은 다르며, 그들은 임의의 장소에옵니다. – erikbwork

관련 문제