簡體   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