gpt4 book ai didi

python - 返回 Python 解释器的 bash 脚本可以替换 shebang 吗?

转载 作者:太空宇宙 更新时间:2023-11-04 04:18:44 24 4
gpt4 key购买 nike

我有一些 Python 脚本,现在正由各种各样的人在多个测试平台上运行。这会产生一个问题,原因有两个:

  1. 所有测试人员的 python3 路径都不相同,并且
  2. 并非所有运行脚本的人都在 $PATH 中设置了 Python 路径。

因为 (1) 我不能对 shebang 进行硬编码,因为它依赖于测试器,并且因为 (2) #!/usr/bin/env python3 不能保证工作,如果放置在 Python 文件的顶部。

我知道 python3 解释器将位于测试人员的几个位置之一。所以我想知道,是否有可能替换 Python 文件顶部的 #!/usr/bin/env python3调用查找 python 位置然后为脚本“设置”它的 bash shell 脚本?如果那不可能,那么剩下的就没有实际意义了。

我创建了一个 bash 脚本,它确实会查看可能的位置,直到找到解释器,但我不知道如何将它返回到 Python 文件的顶部。

例如,我创建了一个基本的 python 文件 (shebang.py)

#!./pyshebang.sh

print("Hello World")

pyshebang.sh 做了两件事,它将找到的 python 路径附加到 PATH,然后 echo 将该路径返回给解释器。如果我运行上面的 python 脚本,stdout 从 bash 脚本获取回显,而不是从 python 脚本获取打印。

最佳答案

is it possible to replace the #!/usr/bin/env python3 at the top of the Python file with a call to a bash shell script that looks for the python location and then "sets" it for the script?

当然可以。这实际上就是 /usr/bin/env python3 所做的。该特定命令没有什么神奇之处;它及其变体恰好广泛有用。

I created a bash script that does look through the possible locations until it finds the interpreter, but what I don't know how to do is return it in the top of a Python file.

你对正在发生的事情有误解。 shebang 行不会导致替换到脚本中。相反,它会导致指定的行作为命令执行,原始脚本的路径和它的参数作为附加参数附加。

因此,您的 pyshebang.sh 应该具有以下几行的一般形式:

#!/bin/bash
# Note: the above shebang line is not a special case

# ... find Python ...

MY_PYTHON=/the/python/I/discovered

# Execute the discovered Python, passing it all the arguments this
# script received
exec "$MY_PYTHON" "$@"

关于python - 返回 Python 解释器的 bash 脚本可以替换 shebang 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54915071/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com