0

次の内容のファイル(myenv.sh)があります

export MYVAR="HELLO"

そして、私は私のプログラムを持っています(myhugeprogram.py):

#!/usr/bin/env python
import os
print os.environ['MYVAR']

実行可能ファイル:chmod 755 myhugeprogram.py

今、私は自分の環境を調達しています:source myenv.sh

そして私のプログラムを実行します:

./myhugeprogram.py
HELLO

予想通り。今私はSSH経由で非対話的にそれを実行します:

user1@host1:~$ ssh user2@host2 ./myhugeprogram.py
Traceback (most recent call last):
  File "./myhugeprogram.py", line 3, in <module>
    print os.environ['MYVAR']
  File "/usr/lib/python2.5/UserDict.py", line 22, in __getitem__
    raise KeyError(key)
KeyError: 'MYVAR'

私は調達していないので、これは正常myenv.shです。今の質問:

SSH経由で非対話的に実行しているときに、Pythonスクリプトを実行する前に、いくつかの環境変数を設定するBashファイルを入手するにはどうすればよいですか?

4

3 に答える 3

3

私が考えることができる2つの方法:

  • たとえば、実行するsshコマンドにsourceコマンドを含めます。

    ssh user2@host2 "source myenv.sh; ./myhugeprogram.py"
    
  • ファイルに環境変数を設定し.bashrcます。

于 2012-04-06T10:02:35.083 に答える
0

環境を設定し、すべての引数とともにプログラムを呼び出すシェルスクリプトラッパー(両方の環境から表示)を記述します。このシェルスクリプトをインテリジェントにして、現在の環境に基づいて環境を設定するだけでよいので、コンテキストに関係なくそのラッパースクリプトを呼び出すだけで、ブラックボックスのように扱うことができます。

于 2012-04-06T10:00:45.163 に答える
0

スクリプト自体で変数をエクスポート/ソースする必要があります。

SSHとfiresourceコマンドのセッションを開いた場合、スクリプトの実行に別のセッションを使用するため、

新しい環境全体が再度ロードされるため、環境変数は使用できません。

os.environ["ASD"] = "asd"構文を使用して、スクリプトの環境変数を設定できます。

于 2012-04-06T10:01:11.653 に答える