質問は、コマンド ライン シミュレーターのような Python サブプロセス モジュールの使用に関連している可能性があります。
このようなアプリケーションのシェル コマンドを渡すことができる my_shell というインフラストラクチャ コードを作成しました。
class ApplicationTestShell(object):
def __init__(self):
'''
Constructor
'''
self.play_ground_dir = "/var/tmp/MyAppDir"
ensure_dir_exists_and_empty(self.play_ground_dir)
def execute_command(self, command, on_success = None, on_failure = None):
p = create_shell_process(self, self.play_ground_dir)
sout, serr = p.communicate(input = command)
if p.returncode == 0:
on_success(sout)
else:
on_failure(serr)
def create_shell_process(self, cwd):
return Popen("/bin/bash", env= {WHAT DO I DO HERE?},cwd = test_dir, stdout=PIPE, stderr=PIPE, stdin=PIPE)
ここで興味深いのは、env パラメータです。Python は、すべての環境変数の「マップ」データ構造のようなものを想定しています。私のアプリケーションでは、いくつかの変数をエクスポートして設定する必要があります。設定およびエクスポート用のスクリプトは、say '/bin/appload myapp' を実行することによって生成されます (appload がパスで常に利用可能であると仮定します)。私が現在行っていることは、p.communicateを呼び出すときに次のことを行うことです
p.communicate(input = "eval `/bin/appload myapp`;" + command)
したがって、基本的にコマンドを実行する前に、インフラストラクチャのセットアップを呼び出します。
- Pythonでこれをより良い方法で行う方法はありますか? シェル作成プロセスの一部として、または Popen クラスの env パラメータに eval /bin/appload 部分をプッシュしたいと考えています。
- 現在の実装にはどのような問題がありますか? (ハッキーだと思いますが、間違っているかもしれません)