2017-01-20 5 views
-1

У меня есть простая функция, которая просто печатает «Привет!». Я хочу использовать bash для вызова моей функции, вместо того, чтобы говорить IDLE. Однако bash, похоже, не хочет печатать результат, возвращаемый функцией hi():.Создание bash выводит значение (строка) из функции python

#!/usr/bin/python 
    def hi(): 
     print 'Hi!' 

Это не печатает «Привет!», Когда я типа питона hi.py (или ./hi.py) в Баш

Однако если я не включать оператор печати внутри функции, но только внутри файла hi.py как одиночного напечатайте 'Привет!' заявление; то bash выводит текст «Привет!». соответственно. Из bash этот код ниже выводит Hi!

#!/usr/bin/python 
    print 'Hi!' 

Изнутри Баш, как я мог бы сделать выход Баш строку из функции привет(): в файле hi.py?

Благодаря

+1

Вам необходимо вызвать функцию. например добавьте 'hi()' в конец вашего скрипта python. (это часто делается в пакете '' if __name__ == '__main __': '] (http://stackoverflow.com/questions/419163/what-does-if-name-main-do) ...) – mgilson

+0

Если вы действительно хотите запустить определенную функцию (а не модуль), обратитесь к [this] (http://stackoverflow.com/questions/2119702/calling-a-python-function-from-bash-script) вопросу. Однако, похоже, что вы хотите, это то, что предложил @mgilson. –

+0

Спасибо, и жаль, что мне пришлось переписать мой титул. – Skillionaire

ответ

0

Предполагая, что вы хотите, чтобы выполнить определенную function.The питона исполняемый файл принимает «-c» флаг, чтобы указать, что вы передаете его код. Так что, если мой файл (hi.py) является:

def hi(): 
     print 'Hi!' 

Тогда я мог бы сделать:

$ python -c "execfile('hi.py'); hi()" 

который пинт выход

HI! 

Причина

, когда вам выполните скрипт python, вы должны сообщить ему, с чего начать. Поскольку Hi не является основной функцией вам нужно вручную вызвать hi()

def hi(): 
     print 'Hi!' 
hi() 
+0

Это решение является наиболее подходящим для меня, поскольку оно не влечет за собой изменения исходного модуля hi.py. – Skillionaire

+0

Спасибо @Aravind T A – Skillionaire

0

Вы должны сделать это в вас hi.py:

def hi(): 
     print 'Hi!' 

    if __name__ == '__main__': 
     hi() 

Тогда он будет работать в Баш:

#!/bin/bash 
python hi.py 
+0

Это решение сработало для меня. Благодарю. Но как это работает? Поэтому я понимаю, что __name__ является переменной (функции hi(): даже если я ее не объявлял), которая сравнивается со значением «__main__» (другая переменная функции hi(): или в основном все функции). Если они равны, то вызывается функция hi(). – Skillionaire

+0

Это действует как основной метод. Подобно java, когда вы определили функцию, вам нужно будет создать основную функцию (_public static void main() _) для вызова этой функции. Теперь, когда вы используете ** python hi.py ** в командной строке, предполагается, что запущенный вами код содержит основной метод, который имеет имя «\ _ \ _ main \ _ \ _». Поэтому, когда «\ _ \ _ main \ _ \ _» обнаружено, вызывается функция hi(). – Jiaxi

+0

Спасибо за ваше разъяснение относительно python, ожидающего найти метод __main__. Я знаком с синтаксисом Java, поэтому аналогия ударила по дому. Я изучал программирование на питоне, используя онлайн-книгу Харви Мудд-Колледж CS For All, доступную здесь, https://www.cs.hmc.edu/csforall/index.html. Их путь к ООП в python берет читателя через различные парадигмы программирования (т. Е. Функциональное программирование и императив), чтобы преподавать синтаксис и семантику Python; до достижения ООП. Таким образом, я еще не достиг классов, и не был знаком с функцией __main__. Благодарю. – Skillionaire

0

Вы вызывающему функцию в вашем питона скрипт ? Чтобы заставить оператор print в вашей функции активироваться, вам действительно нужно вызвать функцию. Например, запуск python test.py для этого файла печатает «Привет!».

# Program named test.py 
def output(): 
    print('Hi!') 

output() # Calling the output function which will cause a print statement 

Также называет также этот файл python в bash. Например, вызов bash call.sh для этого скрипта работал и печатался «Привет!». в командной строке

#!/bin/bash 
# Script to call python file 
python test.py 
+0

Спасибо, что это решение работает. В основном, как вы сказали выше, я должен вызвать функцию (ее имя output()) из самого модуля, поэтому python может разрешить bash выводить строку. Его получение яснее спасибо. Над вашим сообщением @Jiaxi посоветовал аналогичное решение с добавлением проверки функции hi(): functions __name__ на значение «__main__». Это по сути аналогичное решение, но он использует условие if. Спасибо. – Skillionaire