【问题标题】:making bash output a value(string) from a python function使bash从python函数输出一个值(字符串)
【发布时间】:2017-06-04 20:51:01
【问题描述】:

我有一个简单的函数,可以简单地打印“Hi!”。我想使用 bash 来调用我的函数,而不是说 IDLE。但是 bash 似乎不想打印从 hi(): 函数返回的输出。

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

当我在 bash 中键入 python hi.py(或 ./hi.py)时,这不会打印“Hi!”

但是,如果我不在函数中包含 print 语句,而只是在文件 hi.py 中包含一个单独的 print 'Hi!' 语句;然后 bash 会输出文本“Hi!”因此。从 bash 下面的代码输出 Hi!

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

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

谢谢

【问题讨论】:

  • 你需要调用该函数。例如在 python 脚本的末尾添加hi()。 (这经常在if __name__ == '__main__': 套件中完成...)
  • 如果您真的想运行特定功能(而不是模块),请参阅this 问题。但是,您想要的似乎就是@mgilson 所建议的。
  • 谢谢,对不起,我不得不改写我的标题。
  • 我真的很喜欢堆栈溢出及其重要的贡献者。我渴望有一天能像你一样乐于助人,这样我也可以帮助别人。谢谢谢谢谢谢。

标签: python bash arguments


【解决方案1】:

假设你想要执行一个特定的函数。python 可执行文件接受'-c' 标志来表明你正在向它传递代码。所以如果我的文件(hi.py)是:

def hi():
        print 'Hi!'

那么我可以这样做:

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

输出结果

HI!

原因

当你执行一个python脚本时你应该告诉它从哪里开始。因为Hi不是一个主函数你需要手动调用hi()

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

【讨论】:

  • 这个解决方案对我来说最适用,因为它不需要对原始 hi.py 模块进行任何更改。
【解决方案2】:

你需要在你的 hi.py 中这样做:

  def hi():
      print 'Hi!'

  if __name__ == '__main__':
      hi()

然后它将在 bash 中工作:

#!/bin/bash
python hi.py

【讨论】:

  • 这个解决方案对我有用。谢谢。但这是如何工作的?所以我的理解是 name 是一个变量(hi(): 函数,即使我没有声明它),它与值 'main' (另一个hi() 的变量:函数或基本上所有函数)。如果它们相等,则调用 hi() 函数。
  • 这就像 main 方法。与 java 一样,当您定义了一个函数后,您需要创建主函数 (public static void main()) 来调用该函数。现在这里发生的情况是,当您在命令行中使用 python hi.py 时,它假定您运行的代码包含名为“__main__”的 main 方法。因此,当检测到 '__main__' 时,会调用 hi() 函数。
  • 感谢您对 python 期望找到 main 方法的说明。我熟悉 Java 语法,所以这个类比很重要。我一直在使用 Harvey Mudd College 的 CS For All 在线书籍学习 Python 编程,这里提供 cs.hmc.edu/csforall/index.html。他们在 Python 中通向 OOP 的路径带领读者通过各种编程范式(即函数式编程和命令式)来教授 Python 语法和语义;在达到 OOP 之前。所以我还没有上课,对 main 函数不熟悉。谢谢。
【解决方案3】:

你是在你的 python 脚本中调用这个函数吗?为了激活函数中的打印语句,您实际上需要调用该函数。例如,为此文件运行 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 为这个脚本工作并打印“嗨!”到命令行

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

【讨论】:

  • 感谢这个解决方案也有效。基本上正如你上面所说,我必须从模块本身中调用函数(它的名称 output()),所以 python 可以允许 bash 输出字符串。它越来越清楚谢谢。在您的帖子上方@Jiaxi 建议了一个类似的解决方案,除了检查 hi(): 函数变量 name 与值“main”。这些本质上是相似的解决方案,但他使用了 if 条件。谢谢。
猜你喜欢
  • 1970-01-01
  • 2016-11-20
  • 2011-03-15
  • 1970-01-01
  • 1970-01-01
  • 2022-07-06
  • 2022-10-01
  • 2017-01-31
  • 1970-01-01
相关资源
最近更新 更多