在 Python 中带参数的错误导入 main

Posted

技术标签:

【中文标题】在 Python 中带参数的错误导入 main【英文标题】:Bug import main with arguments in Python 【发布时间】:2011-04-03 04:16:15 【问题描述】:

在一个脚本中,我试图从另一个带有参数的脚本中导入主模块。

我收到错误消息“NameError:未定义全局名称‘模型’”。

如果有人看到错误,我将不胜感激!

我的代码:

脚本1

#!/usr/bin/python

import sys
import getopt
import pdb
import shelve

class Car:
    """ class representing a car object """
    def __init__(self, model):
        self.model = model

class Porsche(Car):
    """ class representing a Porsche """
    def __init__(self, model):       
        Car.__init__(self, model)
        print "I have a Porsche but no driving licence : too bad !"

# Main
def main(argv):

    settings = shelve.open('mySettings')
    global model
    try:
        opts, args = getopt.getopt(argv, "m:", ["model="])
    except getopt.GetoptError, err:
           print " wrong argument, exiting "
           sys.exit()
    for opt, arg in opts:
        if opt in ("-m", "--model"):
            model = arg

    def choose_car(model):
        """ Creates the car"""
        my_Porsche = Porsche(model)     

    choose_car(model)

if __name__ == "__main__":
   main(sys.argv[1:]) 

脚本2

#!/usr/bin/python

import os
import sample
import sys

def main(argv):
        script1.main("-m Carrera")

# Main program
if __name__ == '__main__':
    main(sys.argv[1:])

rgds,

【问题讨论】:

【参考方案1】:

argv 是一个列表。因此,您应该将script1.main 称为

script1.main(['-m', 'Carrera'])

或者,等价的,

script1.main('-m Carrera'.split())

【讨论】:

以上是关于在 Python 中带参数的错误导入 main的主要内容,如果未能解决你的问题,请参考以下文章

.Net 7的带参和不带参的Main入口

oracle中带参存储过程的使用

Java 中带参无返回值方法的使用

Java 中带参带返回值方法的使用

在标准输入上使用相对导入的Python 3脚本给出错误:没有名为'__main__.XXX'的模块; '__main__'不是包

从名称中带有点的文件夹导入 - Python