실제 파이썬 버전을 time
명령 줄 프로그램으로 작성하려고합니다. 실제/usr/sys 시간을 셸에 표시하는 대신 데이터베이스에 기록합니다.파이썬 셸 래퍼
내가 현재 가지고하는 것은 :
wrapper.py
#!/usr/bin/python
import sys
from subprocess import Popen, PIPE
cmd = 'time ' + (' '.join(['"%s"' % v if ' ' in v else v for v in sys.argv[1:]]))
p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True)
print p.stdout.read()
print p.stderr.read()
단순화를 들어, 나는 데이터베이스 삽입 코드를 제외했습니다.
그러나, 문제를 설명하기 위해, 나는 테스트 스크립트 사용하고 있습니다 : 나는 wrapper.py python delay.py
을 실행하면
#!/usr/bin/python
import time
for i in xrange(3):
print i
time.sleep(1)
, 나는 초이 같은 다음, 실시간으로 인쇄보고 싶습니다를 :
real 0m3.057s
user 0m0.030s
sys 0m0.000s
는 대신, 3 초 동안 아무 출력을 얻을 수없고, 다음이 인쇄되어 있습니다 :
0
1
2
0.02user 0.00system 0:03.03elapsed 0%CPU (0avgtext+0avgdata 21632maxresident)k
0inputs+0outputs (0major+1514minor)pagefaults 0swaps
서브 프로세스의 출력을 실시간으로 어떻게 읽고 출력합니까?
time
의 출력은 왜 내가 쉘에서 직접 실행하고 파이썬 스크립트 내의 서브 프로세스에서 실행될 때 뒤죽박죽이되는 것과 다른가요?
전화하세요. 완벽하게 작동하며 예상했던 것보다 훨씬 간단합니다. – Cerin