다음 작업을 수행하는 라이브러리를 찾을 수 없으므로 직접 작성하기 시작했습니다. 나는 어떤 문제에 대한 해결책을 찾을 수 없지만 누군가가 제안을하기를 바랍니다.원격 셸 명령을 보내고 출력을 검색합니다.
내가 원하는 것은 이것입니다. 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) 터미널이 실제로 연관되어 있는지)과 다른 것들은 문서화되지 않았습니다 (터미널 처리 중 일부는 한 번에 나온 것 같습니다. 실제 타자기가 컴퓨터에 연결된 곳).
안녕하세요, 그렇습니다. 내가 pexpect에서 기대했던 것입니다. 그러나 명령 문자를 제거하지는 않습니다. [보세요] (https://github.com/pexpect/pexpect/issues/137) – erikbwork
@ erikb85 당신이 보낸 명령을 알고 있습니다. 검색 한 후에 빈 문자열로 바꾸는 쉬운 작업입니다. 간단한 str.replace(). – vks
그런 것이 하나뿐입니다.많은 것이 있고, 그들은 다르며, 그들은 임의의 장소에옵니다. – erikbwork