
Python 모듈(Python 스크립트) 을 사용하여 Debian 컨테이너 shutdown -h 0
로 보내는 lxc
(즉, lxc에서 이 명령을 실행하는) 데 문제가 있습니다 . pexpect
이 모듈에서 사용자는 EOF 중에서 특정 하위 문자열을 "기대"(= 프로세스 출력 대기)할 수 있습니다. 이는 출력에서 EOF가 인식되지 않는 이유를 추가로 디버깅할 수 있도록 질문으로 이어집니다. 프로세스가 종료될 때까지 기다리려면 프로세스 종료 후 내가 무엇을 "예상"할 수 있는지 알아야 합니다. pexpect
모듈이 해당 프로세스에 대한 비차단 기능을 숨기기 때문에 단순히 프로세스를 기다릴 수는 없습니다 .
그만큼pexpect
(참조http://www.bx.psu.edu/~nate/pexpect/pexpect.html#pexpect.spawn.expect자세한 내용은) 읽기 시스템 호출에서 EOF 수신을 (덕) 유형으로 래핑하고 pexpect.expect
(프로세스의 가능한 출력/피드백 캡슐화)에서 사용할 수 있도록 합니다.
나는 같은 일부 프로세스가 ls
EOF로 종료될 것으로 예상되기 때문에, 즉 pexpect
EOF의 의미(예:http://pexpect.sourceforge.net/pexpect.html).
답변1
이 shutdown -h 0
명령을 실행하는 halt
대신 대신 실행하거나 호스트에서 이 명령을 실행하는 것이 좋습니다 lxc-shutdown -n <name>
.
답변2
EOF는 무한한 양의 데이터(예: 스트림)를 제공할 수 있는 리소스에 대해 더 이상의 입력이 예상되지 않음을 나타냅니다. 이러한 상황은 종종 스트림에 단일 문자를 작성하여 표현됩니다(기본 시스템(예: OS 또는 런타임 환경)에 의해 정의됨).
프로세스는 프로세스 간 통신을 위해 스트림을 사용하므로 출력 제한을 표시해야 하며 전송 프로세스는 EOF를 사용하여 입력 제한을 표시해야 합니다. 기본 시스템은 이 입력 및 출력을 자체 프로세스 처리 메커니즘으로 확실히 전달하여 프로그램/시스템에서 평가에 EOF를 사용할 수 있도록 합니다.
pexpect
질문의 사용 사례 에 대한 참고 사항 : 컨테이너 shutil.pexpect
의 파일을 복사하는 데 적합하지 않은 것 같습니다 lxc
. 문제가 발생하고 출력의 시간 오프셋으로 pexpect
인해 혼란이 발생합니다.