Как я могу выполнить все функции и отдельные функции в качестве аргументов времени выполнения, используя Python - PullRequest
0 голосов
/ 17 октября 2019

Мне нужно выполнить имя класса с функциями внутри него и выполнить функции внутри класса индивидуально во время выполнения, передав аргументы.

Код Python, сохраненный как test.py

import sys 
import threading
from threading import Thread

class test():
  def func1(self):
     print('hi im func1')
  def func2(self):
     print('hi im func2')
  def func3(self):
     print('hi im func3')

  def runall(self):
    if __name__ == '__main__':
        Thread(target=self.func1).start()
        Thread(target=self.func2).start()
        Thread(target=self.func3).start()

 if __name__ == '__main__':
    try:
        run = test()
        run.runall()
        globals()[sys.argv[1]]()
    except KeyError:
         raise KeyError('Invalid Function Name Passed in Argument! refer the code for valid Name.')
  1. Попытка выполнить все функции внутри класса:

    Выполнение во время выполнения: c: \> тест python test.py

    Пропущен, но выдал ошибку в тесте
    File ".py ", строка 180, в globals () sys.argv [2] TypeError: объект 'test' не может быть вызван

  2. Попытка выполнить только определенные функции внутри класса

    Выполнение во время выполнения: c: \> python test.py func1 Keyerror запускается.

Может кто-нибудь подсказать мне, как выполнить полный класс и отдельные функции внутри класса во время выполнения

Ответы [ 2 ]

1 голос
/ 17 октября 2019

Первый шаг работает мной (на python 3.7.2)

    > python3 test.py test
    hi im func1
    hi im func2
    hi im func3

Однако это запускается оператором run.runall(). Какую версию Python вы запускаете? разве у вас нет другой переменной test в вашем рабочем пространстве?

Во-вторых, решение, вдохновленное здесь , вы можете заставить отдельные методы класса работать следующим образом:

 if __name__ == '__main__':
    try:
        run = test()
        run.runall()
        #globals()[sys.argv[1]]()
        getattr(test(), sys.argv[1])()

    except KeyError:
         raise KeyError('Invalid Function Name Passed in Argument! refer the code for valid Name.')

результат:

> python3 test.py func1
hi im func1
hi im func2
hi im func3
hi im func1
0 голосов
/ 18 октября 2019

Это сработало для меня. Теперь я могу выполнять все функции и отдельные функции по отдельности. Спасибо всем за вашу поддержку и руководство !!

  if __name__ == '__main__':
    try:
        if sys.argv[2]=='test':
             run = test()
             run.runall()
        else:
            getattr(test(), sys.argv[2])()

    except KeyError:
         raise KeyError('Invalid Function Name Passed in Argument! refer the code for valid Name.')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...