【问题标题】:Call Python script from bash shell script [duplicate]从 bash shell 脚本调用 Python 脚本 [重复]
【发布时间】:2019-10-31 11:36:28
【问题描述】:

我正在尝试实现一个命令,该命令涉及将POST/GET 请求发送到远程服务器并解释JSON 格式结果。由于通过bash解析JSON相当困难,所以我决定先编写python脚本并在shell脚本中调用它。

我的 shell 脚本现在看起来像这样

#!/bin/sh
case $1 in
  submit-job)
    python3 src/submit-job.py
    ;;
  lists-job)
    python3 src/lists-job.py
    ;;
  ....and so on
esac

我希望我的用户可以使用以下命令。

Job submit-job argument1 argument2...
Job lists-job
...and so on

基本上。我只有一个名为Job.py 的Python 类文件,包括submit-joblists-job 等多个函数。 但是,为了将不同的函数分隔到不同的命令参数,我必须创建单独的 python 文件来触发它。 (如submit-job.pylists-job.py)。

例如。 提交作业.py

from Job import Job

j = Job()
j.submit_job()

lists-job.py

from Job import Job

j = Job()
j.lists_job()

如您所见,它们非常相似。有没有更好的方法或最佳实践来实现我想要的?

【问题讨论】:

  • python job-tools.py submit,然后让您的 Python 脚本检查其命令行参数。 (更好的是,让 distutils/setuptools 创建一个可执行包装器,然后它只是 job-tools submit,不需要显式调用 python 解释器)。
  • 一种常见的技术是拥有一个包含多个链接的文件,然后让程序检查 $0。
  • @WilliamPursell, ...或者,在 Python 的意义上,检查 sys.argv[0]
  • 谢谢!我去看看 distutils

标签: python bash shell


【解决方案1】:

为什么不在 Python 中执行 if/else?

import sys
from Job import Job

j = Job()
arg = sys.argv[1]
if arg == 'submit-job':
    j.submit_job()
elif ...
    ...

现在您可以在 bash 脚本中调用它,传递参数,甚至已经删除 bash 脚本并直接从命令行调用 Python 脚本。

【讨论】:

  • 这是一个我没有想过的好方法。谢谢!
猜你喜欢
  • 2014-06-05
  • 1970-01-01
  • 2016-03-13
  • 2018-03-25
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
  • 2015-05-17
  • 2017-11-26
相关资源
最近更新 更多