24

Pythonスクリプトが環境モジュールをロードして使用する方法はありますか?os.system('module load xxx')サブシェルで実行されるため、機能しません(少なくとも、それが起こっていると思います)。

4

4 に答える 4

22

私はこの質問が古いものであることを知っていますが、それでも私が答えを探していたのに十分に関連しているので、私が見つけたものを投稿します。

少なくとも3.2.9以降のソースでは、python "init"ファイルを含めて、モジュールのpython関数バージョンを取得できます。

>>> exec(open('/usr/local/Modules/default/init/python.py').read())
>>> module('list')
No Modulefiles Currently Loaded.
>>> module('load','foo')
>>> module('list')
Currently Loaded Modulefiles:
  1) foo/1.0

以前のバージョンでは.py拡張子がなくても同じことができると言われましたが、それは中古なので、ymmvです。

代替の「init」ファイルの場所(@libによるコメントから):/usr/share/Modules/init/python.py

Python 3で使用するには、バージョン4.0以降の環境モジュールが必要です。これは、Python3に準拠したバージョンのPythoninitファイルを含む最初のバージョンであるためです。

于 2013-08-19T23:17:11.487 に答える
4

os.popen()私たちの管理者の1人は、次の呼び出しを使用して問題を解決することができましたmodulecmd

cmd = os.popen('/path/to/modulecmd python load my-module')
exec(cmd)
于 2011-03-25T06:32:19.450 に答える
2

受け入れられた解決策は機能しますが、私はそれを書くのが簡単であることがわかりました:

import sys
sys.path.insert(0, '/path/to/environment/modules')
# Environment modules become available by loading python.py (the name choice could be better here)
from python import module

# ...
module('use', '/some/dir')
module('load', 'program/1.2.3')

これは私にはよりPythonのように見え、IDEがオートコンプリートなどを提供できるようにします。

于 2020-11-18T08:10:07.297 に答える
0

直接ではありませんが、環境に応じて、考えられる回避策が1つあります。システムコマンドの前にを付けることができると仮定するとENVVAR=value、次の行に沿って何かを行うことができます。

import os
os.environ['EDITOR'] = 'vi'
cmd = "EDITOR=%(EDITOR)s $EDITOR" % os.environ
os.system(cmd)

コードはviをEDITOR環境変数に割り当て、それをコマンドラインに渡して、コマンド(この場合はEDITOR)を実行します。

于 2011-03-25T03:42:54.317 に答える