2017-01-20 32 views
-1

我有一个简单的函数,它只是打印“Hi!”。我想用bash来调用我的函数,而不是让我们说空闲。然而bash似乎并不想打印hi():函数返回的输出。使bash从python函数输出一个值(字符串)

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

这不打印 “嗨!”,当我输入蟒蛇hi.py(或./hi.py)进入庆典

但是,如果我不包括里面的print语句的一个函数,但只在文件hi.py中作为一个独立的print'嗨!'声明;然后bash确实输出文字“嗨!”因此。从bash下面的代码输出你好!

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

从内部bash中,我该如何让bash从函数hi()中输出字符串:在文件hi.py中?

感谢

+1

您需要调用的函数。例如在你的python脚本的末尾添加'hi()'。 (这经常在['__ ___ ___ _ _ _ _ _ _':'](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:

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

此解决方案适用于我。谢谢。但这是如何工作的?所以我的理解是,__name__是一个变量(即使我没有声明hi()函数),它与值'__main__'(hi():函数的另一个变量或基本上所有函数)进行比较。如果它们相等,则hi()函数被调用。 – Skillionaire

+0

这就像主要方法一样。和java一样,当你定义了一个函数时,你需要创建main函数(_public static void main()_)来调用该函数。现在在这里发生的是当你在命令行中使用** python hi.py **时,它假定你运行的代码包含名称为'\ _ \ _main \ _ \ _'的主方法。因此,当检测到'\ _ \ _main \ _ \ _'时,将会调用hi()函数。 – Jiaxi

+0

感谢您的澄清,蟒蛇期待找到__main__方法。我对Java语法很熟悉,所以这个类比就打到了家里。我一直在使用Harvey Mudd College的CS For All在线书籍学习python编程https://www.cs.hmc.edu/csforall/index.html。他们在python中面向OOP的途径让读者通过各种编程范例(即函数式编程和命令式)来教授Python语法和语义;在到达OOP之前。因此我还没有上过课,并且对__main__函数不熟悉。谢谢。 – Skillionaire

0

你叫你的python脚本的功能:

def hi(): 
     print 'Hi!' 

    if __name__ == '__main__': 
     hi() 

然后,它会在bash工作?为了让你的函数中的print语句被激活,你实际上需要调用这个函数。例如对此文件运行python test.py将打印出“Hi!”

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

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

也在bash中调用这个python文件也有效。例如,为这个脚本调用bash call.sh工作并打印出“Hi!”在命令行

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

感谢这个解决方案。基本上如上所述,我必须从模块本身中调用函数(它的名称output()),所以python可以允许bash输出字符串。它越来越清晰的感谢。在你的帖子之上@Jiaxi建议了一个类似的解决方案,并在hi():函数变量__name__中检查'__main__'值。这些基本上是类似的解决方案,但他使用if条件。谢谢。 – Skillionaire