【问题标题】:Call python file function from bash script从 bash 脚本调用 python 文件函数
【发布时间】:2020-12-14 09:54:02
【问题描述】:

我在同一个位置有两个文件。

第一个文件是sh文件,另一个是python文件。

a.sh 文件

#!/bin/bash
a=1
b=1
if [[ $a -eq $b ]]
then
   call the python file function named callable with command line argument as value of a
   # python b.py $a
fi

b.py 文件

这个文件有很多功能,但我需要专门调用可调用的函数:

arg = sys.argv[1]

def callable():
   print(arg)

如何在脚本中做到这一点?

【问题讨论】:

  • 结合shell和python脚本总是丑陋的,但如果你必须这样做,你应该看看python的argparse模块。
  • @EatPayBong: 文件函数应该是什么?如果您为程序编写具体的输入和具体的输出,将会有所帮助。就目前的情况而言,我不知道你想要实现什么。
  • 您需要将 Python 脚本视为 CLI 并为此使用 argparse(或等效项)。然后你需要实现到你的可调用对象的路由。

标签: python python-3.x bash shell


【解决方案1】:

在你的 python 脚本的底部添加这个:

if __name__ == '__main__':
    globals()[sys.argv[1]]()

然后在bash脚本中调用你想要的函数

python b.py callable
# or
python b.py $a

【讨论】:

  • 这可能比 OP 要求的更复杂,但问题还不清楚。
【解决方案2】:

您只是在寻找这个吗?

if __name__ == '__main__':
    callable()

顺便说一句,您想修复 shell 脚本中的引用。

#!/bin/bash
a=1
b=1
[[ "$a" -eq "$b" ]] && python b.py "$a"

另见When to wrap quotes around a shell variable

【讨论】:

  • 最初我也在考虑提供这个解决方案,但猜想他/她可能还想从 b.py 调用其他函数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-12
  • 1970-01-01
  • 1970-01-01
  • 2021-04-03
  • 2019-10-31
相关资源
最近更新 更多