2014-05-13 3 views
0

내 스크립트입니다 :stdin 스크립트를 "라이브"테스트 할 수 있습니까? 일반적으로 프로그램이 백그라운드에서 상호 작용합니까? 다음과 같이

import os 
import sys 
import time 
import MySQLdb 

if __name__=="__main__": 

dbcon = MySQLdb.connect(host="host", port=3306, user="user", passwd="passwd", db="db") 
dbcur = dbcon.cursor() 

deliveryCount = 0 
bounceBadMailbox = 0 
bounceInactiveAccount = 0 
bouncePolicyRelated = 0 
bounceSpamRelated = 0 
bounceQuotaIssues =0 

while True: 
    #type, timeLogged,timeQueued,orig,rcpt,orcpt,dsnAction,dsnStatus,dsnDiag,dsnMta,bounceCat,srcType,srcMta,dlvType,dlvSourceIp,dlvDestinationIp,dlvEsmtpAvailable,dlvSize,vmta,jobId,envId,queue,vmtaPool 
    line = sys.stdin.readline() 
    fwrite = open("debug.log","w") 
    fwrite.write("in true loop") 

    logList = line.split(',') 

    bounceType = logList[0] 
    bounceCategory = logList[10] 
    emailAddress = logList[4] 
    jobId = logList[19] 

    if bounceType == 'd': 
     deliveryCount += 1 
     dbcur.execute('UPDATE campaign_stat_delivered SET pmta_delivered = pmta_delivered + %d WHERE id = %d', (deliveryCount,jobId)) 
     dbcon.commit() 

    elif bounceType == 'b': 
     if bounceCategory == 'bad-mailbox': 
      bounceBadMailbox +=1 
      dbcur.execute('UPDATE list_users SET status = %s, modified_date=NOW() WHERE email=%s', ('b',emailAddress)) 
      dbcur.execute('UPDATE campaign_stat_delivered SET bad_mailbox = bad_mailbox + %d WHERE id = %d', (bounceBadMailbox,jobId)) 
      dbcon.commit() 

     elif bounceCategory =='inactive-account': 
      bounceInactiveAccount +=1 
      dbcur.execute('UPDATE list_users SET status = %s, modified_date=NOW() WHERE email=%s', ('i',emailAddress)) 
      dbcur.execute('UPDATE campaign_stat_delivered SET inactive_account = inactive_account + %d WHERE id = %d', (bounceInactiveAccount,jobId)) 
      dbcon.commit() 

     elif bounceCategory =='policy-related': 
      bounceInactiveAccount +=1 
      dbcur.execute('UPDATE list_users SET status = %s, modified_date=NOW() WHERE email=%s', ('p',emailAddress)) 
      dbcur.execute('UPDATE campaign_stat_delivered SET policy_related = policy_related + %d WHERE id = %d', (bouncePolicyRelated,jobId)) 
      dbcon.commit() 

     elif bounceCategory =='spam-related': 
      bounceInactiveAccount +=1 
      dbcur.execute('UPDATE list_users SET status = %s, modified_date=NOW() WHERE email=%s', ('s',emailAddress)) 
      dbcur.execute('UPDATE campaign_stat_delivered SET spam_related = spam_related + %d WHERE id = %d', (bounceSpamRelated,jobId)) 
      dbcon.commit() 

     elif bounceCategory =='quota-issues': 
      bounceInactiveAccount +=1 
      dbcur.execute('UPDATE list_users SET status = %s, modified_date=NOW() WHERE email=%s', ('q',emailAddress)) 
      dbcur.execute('UPDATE campaign_stat_delivered SET quota_issues = quota_issues + %d WHERE id = %d', (bounceQuotaIssues,jobId)) 
      dbcon.commit() 


fwrite = open("debug2.log","w") 
fwrite.write("out of true loop") 

dbcon.close() 

나는 어떠한 결과를받지 못했습니다, 그리고 그것이 내가 스크립트를 수정해야하기 때문에, 표준 입력에 공급 내 프로그램을 다시 시작, 나에게 디버깅 정말 시간이 오래 복용 , 그리고 내 코드 줄을 시도해보십시오.

python mystdinscript.py 

볼 실제 결과 :

내가 할 수있는 방법이 있나요? ... 즉 활발히 실행되는 stdin 스크립트로 피드 할 수있는 파이썬 스크립트를 만들려면 어떻게해야합니까?

제가 현재 서있는 것처럼이 프로그램에이 프로그램이 포함되어 있으며 결과가 표시되지 않습니다. 따라서 디버그하기가 매우 어렵습니다.

+0

리눅스에서는 'tee' 유틸리티와 같은 것을 사용하여 통신을 관찰 할 수 있습니다. – sje397

답변

0

당신의 출력을 볼 수있는 가장 빠른 방법은 표준 출력 fwrite을 설정하는 것입니다 :

#fwrite = open(...) 
fwrite = sys.stdout 

이이 화면에 대신의 결과를 파일로 인쇄합니다.