LabVIEWからPythonコードを呼び出したときにPythonの相対パスが変わるのはなぜですか?

更新しました Oct 22, 2021

使用製品

ソフトウェア

  • LabVIEW

プログラミング言語

  • Python

問題

PythonノードでLabVIEWからPythonスクリプトを呼び出しています。Pythonスクリプトは、 os.path.abspath(<relative path>)を使用してPythonスクリプトディレクトリに対して相対的に定義されたファイルパスを生成します。スクリプトがWindowsコマンドプロンプトから呼び出された場合、生成されたファイルパスは正常に見えます。しかし、LabVIEWから呼び出された場合、返されるパスはC:\Windows\System32を基準にして定義されています。この違いはなぜ発生しますか?
 

解決策

Pythonのos.path.abspath(<relative path>)関数は、相対パスを現在の作業ディレクトリ(CWD)からの相対パスとして解釈します。

WindowsコマンドプロンプトからPythonスクリプトを呼び出す場合、CWDは通常Pythonスクリプトファイルの場所と同じです。その結果、CWDに関連して定義された生成されたファイルパスも、Pythonスクリプトファイルに関連するようになります。

LabVIEWを使用してPythonスクリプトを呼び出す場合、CWDはデフォルトでLabVIEWが最初に起動されたディレクトリです。つまり、スタートメニューからLabVIEWを開くと、CWDはC:\Windows\System32になります。

この現象に関しまして、2つの対処方法があります:
  • 相対パスを定義するときに、CWDではなくスクリプトファイルの場所を参照するようにPythonスクリプトを編集する。
  • LabVIEWからCWDをプログラム的に変更する。
LabVIEWからCWDを取得または設定するためのサンプルVIがあります。サンプルVIを使用することでPythonスクリプトを呼び出す前にCWDが設定されている場合は、相対パスを決定できます。

サンプルVIは下記のリンクからダウンロードできます。
LabVIEWで現在のディレクトリを取得/設定する