繁体   English   中英

从 perl 调用 python - 方法调用不正确

[英]Calling python from perl - methods are not calling properly

我正在尝试从 Perl 脚本调用 python 脚本。 python 脚本导入另一个 python 文件。 Perl个文件和python个文件放在不同的目录下。 当我尝试直接运行 python 脚本时,它会调用导入 python 文件的构造函数和另一种导入文件的方法并成功运行。 但是,当我尝试从 Perl 脚本执行相同操作时,调用了唯一的构造函数。

实用程序.py

Class DemoCheck :
   def Hello():
   print("Hello")

   Utility(self):
   print("Constructor calling")

运行.py

import Utility
const = Utility.DemoCheck
const.Hello()

当我直接运行run.py时。 output 将首先是构造函数打印,然后是 hello 方法打印。 当我试图从 Perl 脚本python /app/python/run.py调用它时,唯一的构造函数是 print 而不是 hello 方法 print。

python 目录都放在文件夹/app/python中,而 Perl 脚本则放在文件夹app/perl中。

有什么我想念的吗?

这与 Perl 无关,完全取决于您运行 Python 脚本的目录。

import Python 模块时,会在sys.path中列出的目录中搜索该模块。 这包括标准库的位置和当前目录。 因此,当您从包含Utility.py文件的目录运行时,一切正常。

在这里,您可以应用四种明智的解决方案:

  • 在启动 Python 脚本之前,将当前目录更改为 app/python。

  • 将模块的位置添加到 PYTHONPATH 环境变量。

  • 更好:将您的 Python 脚本转换为可安装的 package,并将其安装到您的系统中,以便其模块可以从默认情况下 Python 查找的位置获得。

  • 更好的是:使用相对导入以便完全避免sys.path查找:

     from.Utility import DemoCheck # ^-- DemoCheck().Hello()

    但是,这需要两个模块具有父级 package,即成为首先加载的某些__init__.py目录的一部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM