Как запустить скрипт Python несколькими функциями в - PullRequest
0 голосов
/ 18 мая 2010

У меня есть скрипт на Python, и я хочу вызвать его несколькими скриптами. Пример кода ниже:

class Name():

    def __init__(self):
        self.name = 'John'
        self.address = 'Place'
        self.age = '100'

    def printName(self):
        print self.name

    def printAddress(self):
        print self.address

    def printAge(self):
        print self.age

if __name__ == '__main__': 
    Person = Name()
    Person.printName()
    Person.printAddress()
    Person.printage()

Я выполняю этот код, вводя ./name.py. Как я могу извлечь этот код из функции printAddress() в конец скрипта?

Спасибо

Ответы [ 4 ]

3 голосов
/ 18 мая 2010

Если вы спрашиваете, как вы можете запустить скрипт на python и запустить его на разных позициях, вам придется запустить скрипт с некоторой информацией о том, что вы хотите от него сделать. Наиболее распространенный способ сделать это - добавить поддержку аргументов командной строки.

import sys

if __name__ == '__main__':   

    for arg in sys.argv: 
        print arg

Если бы вы выполнили вышеуказанный скрипт из командной строки, он ничего бы не сделал, но если вы запустите его с некоторыми дополнительными параметрами, такими как

./launch.py my_argument another_argument and_so_on

Вы увидите, что скрипт имеет доступ к дополнительным аргументам запуска через список sys.argv. Используя это, вы можете проверить наличие переданных аргументов при запуске, а затем начать выполнение сценария в нужном месте.

Один пример с вашим скриптом может быть следующим:

import sys

class Name:

    def __init__(self):
        self.name = 'John'
        self.address = 'Place'
        self.age = '100'

    def printName(self):
        print self.name

    def printAddress(self):
        print self.address

    def printAge(self):
        print self.age


if __name__ == '__main__': 

    Person = Name()

    launchOptions = sys.argv[1:]

    if not launchOptions or 'name' in launchOptions:
        Person.printName()

    if not launchOptions or 'address' in launchOptions:
        Person.printAddress()

    if not launchOptions or 'age' in launchOptions:
        Person.printAge()

Диапазон в sys.argv [1:] таков, что первая запись в sys.argv будет путем к запущенному сценарию.

Таким образом, вы можете запустить этот пример и получить следующие результаты

./launch
John
Place
100

./launch age
100

./launch address
Place

./launch name
John

Теперь это просто очень простой пример. Если вы решили пойти дальше в этом направлении, вам может быть полезно прочитать о pythons getopt module . Это парсер для параметров командной строки.

Надеюсь, я правильно понял вопрос.

1 голос
/ 18 мая 2010

Я бы не советовал вам делать это на самом деле, так как это бесконечная рекурсивная функция, но это может быть выполнено:)

class Name():

    def __init__(self):
        self.name = 'John'
        self.address = 'Place'
        self.age = '100'

    def printName(self):
        print self.name

    def printAddress(self):
        print self.address
        main()

    def printAge(self):
        print self.age

def main():
    Person = Name()
    Person.printName()
    Person.printAddress()
    Person.printage()

if __name__ == '__main__': 
    main()
0 голосов
/ 04 мая 2011

Более гибкий способ обработки параметров командной строки - использовать модуль «optparse». Проверьте ссылку: http://docs.python.org/library/optparse.html

0 голосов
/ 18 мая 2010

Линия

Person = Name()

указывает, что имя класса на самом деле должно быть Person. Полностью удалите методы printXXX и добавьте вместо них метод __repr__, например, как

def __repr__(self):
    return "%s\n%s\n%s" % (self.name, self.address, self.age)

Наконец, я рекомендую добавить имя, адрес и возраст в список параметров, принятый init:

def __init__(self, name, address, age):
    ...

После создания экземпляра объекта Person вы можете просто напечатать его:

person = Person()
print person
...