Как запустить функцию python из командной строки Windows 10 в ‘python filename.py формат ‘funcname’?

#python-3.x #cmd

#python-3.x #cmd

Вопрос:

У меня есть следующий файл python с именем hello.py:

 print('Hello')

def world():
    print('Hello World')
  

Если я введу следующее в командной строке для Windows 10, я получу:

 In: python hello.py
Out: 'Hello'

In: python hello.py world
Out: 'Hello'
  

Обратите внимание, что во второй командной строке «Hello World» не является выводом. Есть ли причина, по которой мой файл не может выполнить функцию python при вызове в командной строке, но может загрузить файл без проблем?

Зачем мне это нужно?:Мне нужно отправить файл большего размера, содержащий много функций для проекта. Для автоматической оценки этого файла мне нужно иметь возможность вызывать из него любую заданную функцию, используя определенную последовательность ‘python filename.py имя функции.’

Обновление: некоторые из приведенных ниже ответов работают, но они не соответствуют определенной последовательности ‘python filename.py functionname’ требуется для оценки моего проекта. Я ценю идеи, которые все предоставили до сих пор.

Ответ №1:

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

 python -c 'from hello import world; world()'
  

В качестве альтернативы вы можете запустить интерпретатор python. cd перейдите в свой каталог файлов и запустите python:

 python
  

а затем импортируйте функцию из вашего файла:

 from hello import world
  

(Запуск cmd python из того же каталога, что и ваш файл.)

Затем вы можете запустить:

 >>> world()
Hello World
  

Комментарии:

1. Мне, в частности, нужно иметь возможность запускать ее через python test.py funcname для проекта, который я отправляю, который автоматически оценивает его таким образом. Обратите внимание, что в ide я могу запускать функцию при вызове без проблем.

2. В качестве краткого примечания: это работает, но, как указано в моем комментарии выше, если я не могу запустить его через python test.py funcname, автоматический грейдер дает мне 0 баллов.

3. @Whip вы пробовали использовать from hello import world и world() в вашем test.py ?

4. Извините, когда я имею в виду test.py Я имею в виду hello.py файл тоже. Я просто использую hello.py файл выше в качестве примера гораздо большего файла, который мне нужно отправить. Я только что узнал, что не могу запускать команды даже из самого простого файла примера, который я создаю.

5. Я нашел решение, которое я опубликовал ниже. Дайте мне знать, что вы думаете!

Ответ №2:

Попробуйте этот фрагмент кода и введите hello.py только:

 print('Hello')
def world():
   return'Hello World'

world()
  

##################################################################

  def F1(): 
     print('This is the first function.')
    
    if __name__ == '__main__':
        F1() 



def F2(): 
print('This is the second function.')
            
 if __name__ == '__main__':
  F2() 
  

теперь вы можете использовать форму (имя_файла) импорт (имя_функции) создать папку (1) с несколькими функциями в ней, и вы можете попытаться импортировать нужную функцию в другую папку (2) по одному, а не все сразу, используя это.
простите меня за ошибки, если они обнаружены, не стесняйтесь спрашивать дальше, если это не уточняется.

Комментарии:

1. Он также не возвращает ‘Hello World’, если я скорректирую код в соответствии с вашей рекомендацией.

2. Вы пробовали, просто набрав hello.py быстрее, чем python hello.py

3. ввод просто hello.py приводит к тому, что вообще ничего не происходит, python3 также ничего не делает

4. Я нашел решение, которое я опубликовал ниже. Дайте мне знать, что вы думаете!

5. Примечание: Это решение работает, но для файла большего размера с несколькими функциями оно не сработало бы, если бы я хотел запустить из него одну конкретную функцию без изменения кода каждый раз. Спасибо за ввод, Саад!

Ответ №3:

Я нашел решение, которое работает для меня:

После более глубокого изучения я понял, что Windows передает ввод sys.argv, который содержит строку всех вводов командной строки, используемых для вызова файла.

В моем случае ‘python hello.py мир», система прошла бы [‘hello.py ‘,’world’] в качестве аргумента для sys.argv. Создав словарь вызываемых функций, а затем сопоставив строку sys.argv с соответствующей функцией в словаре, я могу выполнить код по желанию.

Новый код:

 print('Hello')

def world():
    print('Hello World')

import sys
callable_functions = {'world':world}
callable_functions[sys.argv[1]]()
  

Ввод и вывод командной строки теперь:

 In: python hello.py world
Out: 'Hello'
Out: 'Hello World'