[英]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.