今天把pycharm的django程序移到wingIDE下面,用自己的config文件,调用另外一个程序员的py文件中的函数。
中间遇到各种问题,首先是import该同学的文件找不到路径,但是物理路径是绝对正确的.
import core.mixpanelTest as metricsTest
最后改成:
from core import mixpanelTest
这样就ok了,是django的bug问题??
随后是config文件路径
context.APP_PATH = sys.argv[0][0:sys.argv[0].rfind('\\')+1] # Parse command-line arguments parser = argparse.ArgumentParser(description='Http Server', prog='PROG') parser.add_argument('--port', type = int, default = 8000, help = 'Port to listen on') parser.add_argument('--conf', type = str, default = context.APP_PATH + 'config\\AppleSauce.conf', help='Config file to parse') #parser.add_argument('--conf', type = str, default = 'D:\\perforce_workspace\\Projects\\serverteam\\SourceCode\\AppleSauce\\config', help='Config file to parse') print context.APP_PATH parser.add_argument('--workernum', type = int, default = 1, help = 'Worker process num') args = parser.parse_args() # Command-line arguments context.LISTEN_PORT = args.port context.CONFIG_FILE = args.conf workernum = args.workernum # Parse config file config = ConfigParser.ConfigParser() config.read(context.CONFIG_FILE) context.MC_NODES = [node for node in str.split(config.get('core', 'MC_NODES'), ',') if len(node) > 0] #MySQL setting DB_HOST = config.get('mysql', 'DB_HOST') DB_PORT = config.getint('mysql', 'DB_PORT') DB_DATABASE = config.get('mysql', 'DB_DATABASE') DB_USER = config.get('mysql', 'DB_USER') DB_PASSWD = config.get('mysql', 'DB_PASSWD') # Mixpanel context.SEPARATOR = config.get('mixpanel', 'SEPARATOR') context.MONITOR_INTERVAL = config.getint('mixpanel', 'MONITOR_INTERVAL') context.HBASE_HOST = config.get('mixpanel', 'HBASE_HOST') context.HBASE_PORT = config.getint('mixpanel', 'HBASE_PORT') context.HIVE_HOST = config.get('mixpanel', 'HIVE_HOST') context.HIVE_PORT = config.getint('mixpanel', 'HIVE_PORT') mc = libmc.Client(context.MC_NODES) #connect hive transport_hive = TTransport.TBufferedTransport(TSocket.TSocket(context.HIVE_HOST, context.HIVE_PORT)) protocol_hive = TBinaryProtocol.TBinaryProtocol(transport_hive) hiveclient = ThriftHive.Client(protocol_hive) transport_hive.open()
如果是_main_做单元测试,
if __name__ == "__main__": try: #reStr = {"project":"Test","_event":"UniTest3","by":"","chart_type":"Line","from_date":"2012-11-11","limit":"40","singleOrCompare":"Single","to_date":"2012-11-14","type":"Total","unit_type":"Day","where":""} #segmentation(reStr) monitorRoutine() except KeyboardInterrupt: pass
config路径要设置成:
parser.add_argument('--conf', type = str, default = context.APP_PATH + '...\\config\\AppleSauce.conf', help='Config file to parse')
如果是django启动的测试,要将config路径设置成:
parser.add_argument('--conf', type = str, default = context.APP_PATH + 'config\\AppleSauce.conf', help='Config file to parse')
此外,context.APP_PATH 是在context.py中定义的,对应于project的python path路径:
这样好了以后,发现能找到同事的py文件了,但是运行到args = parser.parse_args()的时候就开始报错了!
错误如下所示:
看到问题知道是args = parser.parse_args()了问题,django竟然不支持断点调试,只能进入到ConfigParser函数里看一下到底咋回事儿了。(按住ctrl键,鼠标双击函数名。)
整个过程我老大在这帮我调试的,还一边跟我说,编程序必须学断点调试!
def parse_args(self, args=None, namespace=None): args, argv = self.parse_known_args(args, namespace) if argv: msg = _('unrecognized arguments: %s') self.error(msg % ' '.join(argv)) return args
一看报不识别的参数错误,就是这里。 也就是说argv不是None,才报的这个错误。打印一下args和argv到底是啥?突然发现,我需要读的是config文件的字段,这里却提示runserver参数无效。
好像把我启动程序的runserver也给写进argc里去了!django的启动程序代码里是有argv的!
manage.py文件代码如下: #!/usr/bin/env python import os import sys if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "AppleSauce.settings") from django.core.management import execute_from_command_line execute_from_command_line(sys.argv)
def parse_args(self, args=None, namespace=None): args, argv = self.parse_known_args(args, namespace) print args, argv if argv: msg = _('unrecognized arguments: %s') self.error(msg % ' '.join(argv)) return args
老大打印出的结果显示如下:
果然和预期想的一样,argv把我的参数写进去了,不是None。
老大改动如下,非常粗鲁,但是见效。把python库的argparse.py 里的parse_args改成下面的样子,强制改argv为None啊!
def parse_args(self, args=None, namespace=None): args, argv = self.parse_known_args(args, namespace) argv = None if argv: msg = _('unrecognized arguments: %s') self.error(msg % ' '.join(argv)) return args
ok,算是初步成功了。 感觉很无语.......