스크립트에서 FIFO로 파이프

스크립트에서 FIFO로 파이프

스크립트에서 Twinkle(VOIP 소프트웨어)로 명령을 보내고 싶습니다. 명명된 파이프를 사용하여 이 작업을 수행할 수 있다고 생각하여

mkfifo phonecmd

Twinkle을 시작하고 명명된 파이프에서 파이프 테일을 파이프하면 명명된 파이프에 작성하여 명령을 보낼 수 있습니다.

tail -f phonecmd | twinkle -c
...
echo answer > phonecmd

그런데 제가 정말 원하는 것은 Python 스크립트를 사용하여 Raspberry Pi의 GPIO 핀을 모니터링하는 명령을 보내는 것인데 어떻게 해야 할지 모르겠습니다.

python gpio.py

Raspberry Pi의 GPIO 핀이 변경되었는지 여부에 따라 "답변" 또는 "안녕"을 인쇄합니다.

python gpio.py | phonecmd

Phonecmd가 명령이 아니기 때문에(이름이 지정된 파이프이기 때문에) 오류가 발생합니다.

python gpio.py > phonecmd

이것은 효과가 있는 한 가지 방법일 뿐입니다. 리디렉션은 버퍼링되므로 Python 프로세스가 닫힌 후에만 모든 것이 Phonecmd 파이프에 기록됩니다.

리디렉션이나 파이프를 "실시간"으로 만드는 방법이 있습니까?

답변1

|파이프 연산자가 작동하지 않는 이유는 파이프 연산자에 다른 명령이 필요하기 때문입니다. 출력 리디렉션 연산자는 >일반 파일이 아닌 일반적인 의미의 파일인 파일로 출력합니다.

파이프의 출력은 일반적으로 버퍼링되며 출력 스트림을 플러시하거나 표준 출력의 버퍼링을 변경할 수 있습니다.

귀하의 경우 가장 우아한 해결책은 Python에서 명명된 파이프를 열고 문자열("답변" 또는 "안녕")을 작성한 다음 파일/파이프를 닫는 것입니다. 이렇게 하면 서버 프로세스와 Python 클라이언트를 분리할 수 있습니다. 서버 프로세스( twinkle -c)를 다시 시작하고 Python 프로세스를 계속 실행할 수도 있습니다.

관련 정보