!["python --version"에 대한 여러 파일 추가 리디렉션 중 하나가 bash에 의해 반복적으로 "무시"되지만 다른 것들은 [닫히지] 않습니다.](https://linux55.com/image/9258/%22python%20--version%22%EC%97%90%20%EB%8C%80%ED%95%9C%20%EC%97%AC%EB%9F%AC%20%ED%8C%8C%EC%9D%BC%20%EC%B6%94%EA%B0%80%20%EB%A6%AC%EB%94%94%EB%A0%89%EC%85%98%20%EC%A4%91%20%ED%95%98%EB%82%98%EA%B0%80%20bash%EC%97%90%20%EC%9D%98%ED%95%B4%20%EB%B0%98%EB%B3%B5%EC%A0%81%EC%9C%BC%EB%A1%9C%20%22%EB%AC%B4%EC%8B%9C%22%EB%90%98%EC%A7%80%EB%A7%8C%20%EB%8B%A4%EB%A5%B8%20%EA%B2%83%EB%93%A4%EC%9D%80%20%5B%EB%8B%AB%ED%9E%88%EC%A7%80%5D%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
bash
리디렉션된 특정 출력 하나가 항상 python --version
파일에 추가되는 대신 콘솔에서 전달되는 반면 다른 모든 출력은 올바르게 리디렉션되는 이유는 무엇입니까 ?
numpy
, , 및 에 의존하는 scipy
Python 패키지를 개발 중이며 h5py
이러한 종속성의 다양한 버전의 다양한 조합에서 테스트 스위트를 자동으로 실행할 수 있도록 설정하고 싶습니다("로컬 CI" 구현과 유사). . 나는 virtualenv
각 버전 조합에 대해 접두사가 붙은 서로 다른 폴더를 만드는 데 사용합니다 env
.
$ ls -1d env*
env-p3.3.6n1.7.0s0.12.0h2.3.1
env-p3.4.0n1.7.0s0.12.0h2.4.0
env-p3.4.4n1.7.0s0.12.0h2.3.1
env-p3.4.4n1.7.0s0.12.0h2.5.0
env-p3.5.1n1.11.0s0.12.0h2.6.0
env-p3.5.1n1.11.0s0.12.1h2.6.0
env-p3.5.1n1.11.0s0.13.0h2.6.0
대부분의 경우 다음 testall
스크립트는 정상적으로 작동합니다.
#!/bin/bash
# Store the filename
fname=testresults
# Overwrite the test result file with the date/time
date > $fname
echo -e "\n" >> $fname
# Pull all the env folders in the loop
for fld in $( ls -1 | grep -E "^env" )
do
# Activate the virtualenv
source $fld/bin/activate
# Informative header
echo "=============================" >> $fname
echo $fld >> $fname
python --version >> $fname
pip freeze | grep -E '^(h5py|numpy|scipy)' >> $fname
#echo -e "\n" >> $fname
# Run the tests, dumped to file
cd opan
python tests.py --all 2>> ../$fname
cd ..
echo -e "\n" >> $fname
# Leave the virtualenv
deactivate
done
그러나 작지만 성가신 버그 동작이 나타납니다. 첫 번째 호출의 출력은 python --version >> $fname
콘솔로 전송되는 반면 다른 모든 호출은 문제 없이 파일로 리디렉션됩니다.
$./testall
Python 3.3.6
$ head -n28 testresults
Mon Jun 20 11:07:45 EDT 2016
=============================
env-p3.3.6n1.7.0s0.12.0h2.3.1
h5py==2.3.1 <=== Python version is missing
numpy==1.7.0
scipy==0.12.0
...........................................................................................................................................................................................................................................................................................................................
----------------------------------------------------------------------
Ran 315 tests in 3.254s
OK
=============================
env-p3.4.0n1.7.0s0.12.0h2.4.0
Python 3.4.0
h5py==2.4.0
numpy==1.7.0
scipy==0.12.0
...........................................................................................................................................................................................................................................................................................................................
----------------------------------------------------------------------
Ran 315 tests in 3.230s
OK
여기서 무슨 일이 일어나고 있는 걸까요? 이 문제를 어떻게 해결할 수 있나요?
답변1
이는 v3.3.6의 출력이 stderr
가 아닌 이기 때문에 발생합니다 stdout
.
분명히 v3.4.0 이전에는 의 출력이 python --version
로 전송되었지만 stderr
v3.4.0 이상에서는 이 출력이 로 전송되었습니다 stdout
.
출력 파일로 리디렉션하면 stdout
잘 작동합니다.stderr
python --version >> $fname 2>&1