답변:
당신은 필요
python -i
그래서:
python -i < p1
그리고 다른 곳 :
exec 3> p1
echo '1j*1j' >&3
...
# and when done, close that file descriptor so python sees the EOF:
exec 3>&-
exec 3>&-
와 동일 하게 작동 exec 3>&1
합니까?
3>&-
여기 에 쓰려고 한 것 같습니다. 3>&1
잘 작동하지만 거의 이해가되지 않습니다. 감사합니다
쓰기 tail -f
후 fifo를 열어 두는 데 사용할 수 있습니다 echo
.
tail -n1 -f p1 | python
왜 이것이 작동 하는가
python
에서 읽는 중입니다 p1
. 파일 끝에 도달하면 읽기가 중지됩니다. 파일이 명명 된 파이프 인 경우에도 파일 읽기에 대한 정상적인 동작입니다. tail
와 -f
의 마지막에 도달 한 후 (후속) 플래그 파일 읽기 계속됩니다.
echo "print \"Hello World\" " > p1
두 번째 터미널에서 시도했지만 아무 일도 일어나지 않았지만 터미널도 차단되지 않았습니다. 파이썬이있는 터미널은 내가 끝날 때까지 차단 된 상태로 유지 ^c
하고 종료하고 파이썬에 의해 키보드 인터럽트 메시지가 표시되면서 파이썬을 종료합니다.
tail -f
명명 된 파이프를 통해 블록 분할 타르 아카이브를 풀 때이 트릭을 사용했습니다 . 훌륭하게 작동했습니다.
전체 프로그램을 한 번에 보내야합니다.
run을 호출 python < p1
하면 셸은 파이썬을 호출하기 전에 입력을 기다리고 있습니다. 즉, 파이썬은 전체 데이터 스트림이 쉘에 의해 읽히고 전체에 전달 될 때까지 전혀 실행 을 시작하지 않습니다 python
.
심지어 실행 python -u p1
(언 버퍼 및 파일에서 읽을입니다 대신 p1
) python
그것의 실행 전에 전체 파일을 읽으려고합니다.
이 실험을 시도하십시오.
터미널 1:
mkfifo p1
python < p1
터미널 2:
cat > p1
print "Hello World"
print "Hello World"
여러 줄을 보낼 수 있지만 용어 1의 파이썬은 아무것도하지 않습니다. 이제 ctrl+를 누릅니다 D. 전체 프로그램이 한 번에 실행됩니다.
요약하자면, 파이프에서 파이썬을 읽으려면 전체 프로그램을 보내야합니다. 이 방법으로 파이썬을 대화식으로 사용할 수 없습니다.
어쩌면 꼬리 접근 방식이 더 유연하지만 더 유연 할 수도 있습니다.
{ echo -n "print \"Hello World\""; cat; } > p1
-n
o가 제거되었을 수 있습니다. 그리고 그 후,와 0 터미널 echo
명령은 내가 누를 때까지 1. 파이썬 명령을 실행하지 않습니다 차단됩니다 ^c
에 echo
단자와 두 프로세스를 종료.
exec 3> p1
하고 있고&3
&exec 3> &1
무엇입니까? 감사합니다.