파일에서 Python 스크립트로 입력을 리디렉션하는 데 실패했지만 파이프를 사용하면 작동합니다.

파일에서 Python 스크립트로 입력을 리디렉션하는 데 실패했지만 파이프를 사용하면 작동합니다.

이 Python 스크립트가 있습니다.postpycess.py그리드 파일에서 데이터 플롯airfoil.p3d. 스크립트는 매개 변수 없이 입력을 처리하도록 설계되었으므로 입력 파일을 만들어 commands.txt스크립트로 리디렉션했습니다.

명령.txt:(첫 번째 입력은 날개의 이름이며 확장자 없이 제공되어야 합니다 .p3d.)

airfoil
1
1
q
q

Windows에서는 다음과 같이 실행할 수 있습니다.

python postpycess.py < commands.txt

하지만 불행히도 Ubuntu 20.04에서 명령을 실행하면 스크립트가 실패합니다.

The current working dir: /tmp/allworks/python/mwe

This is Postpycess, the CFD postprocessor
Version: 1.1
.p3dr project name: Error: can't read the file airfoil

그러나 다음은 파일에만 적용됩니다.

printf 'airfoil\n1\n1\nq\nq\n' | python postpycess.py

Python 스크립트에서 원인을 좁히고 성공하지 못한 채 동일한 문제를 재현하는 최소한의 예제를 만들려고 노력했습니다.

Linux에서 파일 입력 리디렉션이 실패하는 이유를 설명할 수 있습니까?

귀하의 도움에 감사드립니다.

답변1

귀하의 줄은 commands.txt(유닉스 스타일) 대신 (윈도우 스타일)로 끝날 수도 있습니다.\r\n\n

그냥 유닉스로 변환 sed -i 's/\r//' commands.txt하거나 스크립트를 sed 's/\r//' commands.txt | python postpycess.py.

관련 정보