gpt4 book ai didi

python - 导入一个位置未知的 python 模块

转载 作者:太空狗 更新时间:2023-10-29 12:31:04 24 4
gpt4 key购买 nike

我想从 python (MOD.py) 中的给定模块导入一个函数 (function.py),我不知道它的位置。为此,我执行了两个步骤:

第一步,我获取包含模块的目录的路径:

path = subprocess.check_output(['find', 'home/scripts','-iname','MOD.py','|','sed','s/\/MOD.py//g']).rstrip()

其次,我指向这个目录以从模块中获取函数:

sys.path.insert(0,'{0}'.format(path))
from MOD import function

编写的代码在第一步就失败了,尤其是在 sed 中。为什么它不起作用?有没有更清晰的方法来做第一步?是否需要执行两个步骤,或者是否可以使用一条 python 指令完成?

谢谢!

最佳答案

首先请注意,您不能那样使用管道!使用 pipe 你必须传递 shell=True 所以不要使用 check_output 使用 Popen,你的代码也失败了findpath 参数在 home 之前添加一个 /

如果执行的命令返回非零退出代码,则会引发异常。您可以使用 try-exceptsubprocess.CalledProcessError 来捕获错误并获取与退出代码一起创建的输出:

import subprocess

try:
ps = subprocess.Popen(['find', '/home/scripts','-iname','MOD.py','|','sed','s/\/MOD.py//g'],shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
path= ps.communicate()[0]
except subprocess.CalledProcessError as e:
out_bytes = e.output
code= e.returncode

此外,作为一种更安全的方法,我建议不要使用 shell=True 而是使用拖车命令:

ps = subprocess.Popen(['find', '/home/scripts','-iname','MOD.py'], stdout=subprocess.PIPE)
path = subprocess.check_output(['sed','s/\/MOD.py//g'], stdin=ps.stdout)

关于python - 导入一个位置未知的 python 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27045350/

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