그래서 나는 이 책을 샀다.소수와 프로그래밍, 진행이 매우 어렵습니다. 오늘 나는 1장에서 설명한 (간단한) 프로그램을 작성했습니다:
#!/usr/bin/env python
import math
def find_gcd(a,b):
while b > 0:
r = a - b * math.floor(a/b)
a = b
b = r
return int(a)
if __name__ == "__main__":
import random, sys
while True:
print find_gcd(random.randrange(int(sys.argv[1])), random.randrange(int(sys.argv[2])))
...지금은 이렇게 불렀습니다.
./gcd-rand.py 10000 10000 > concievablyreallyhugefile
...지금 저는 bash
엄청나게 큰 파일이 특정 크기에 도달하면 한 줄이 끊어지는 꿈을 꾸고 있습니다. 나는 그것이 다음과 같이 보일 것이라고 상상합니다.
while $(du -h f) < 32M; do ./gcd-rand.py 10000 10000 > $f; done
...하지만 저는 이전에 while 루프를 작성한 적이 없으며 bash
구문이 어떻게 작동하는지 잘 모릅니다.
답변1
비결은 test 명령 test
이나 이에 상응하는 명령을 사용하는 것입니다 [ ... ]
.
while [ "$(du -m f|cut -f1)" -lt 32 ]
do
./gcd-rand.py 10000 10000 > "$f"
done
자세한 내용은 을 참조하세요 help test
.
노트
test
또는 [
명령은 bash입니다.내장. 도움말 정보는 bash를 통해 help test
또는 bash 내에서 검색할 수 있습니다 help [
. 쉘에 해당 명령이 없는 경우 사용되는 명령을 man test
나타냅니다 .test
내장또는 명시적으로 로 호출됩니다 /usr/bin/test
.
답변2
답변3
Python 코드는 영원히 반복됩니다. 따라서 백그라운드에서 실행했다가 파일 크기를 초과하면 종료하는 것이 좋습니다. 한 줄로:
{ ./gcd-rand.py 10000 10000 > f & }; p=$!; while (( $(stat -c %s f) < 33554432 )); do sleep .1; done; kill $p
참고: Dirk의 제안에 따라 적절한 수면 시간을 선택하세요. stat 외에도 du를 사용할 수도 있습니다.
답변4
ulimit
다음을 사용하여 셸(또는 해당 하위 항목)이 생성할 수 있는 파일 크기를 제한 할 수 있습니다 .
ulimit -f 32768