問題は、同じプロセス内で複数のシェルにアクセスする必要があることです。複数のノードに接続できるシステムがあるため、システムでコマンドを実行し、次にノードでコマンドを実行する必要があり、複数のコマンドを送信する必要がある場合があります。別のプロセスを作成せずにノード
たとえば、solaris システムで Sybase db にアクセスするためにこのコードを書きました (何らかの理由で、Python 2.6 のバージョンに Sybase モジュールをインストールできませんでした)。
cmd1 = 'isql -Usa -w1024 -P********'
cmd2 = 'use imhdb'
cmd3 = 'go'
cmd4 = "SELECT Id_number, Object_name FROM IM_top WHERE Object_name LIKE'%BtsSiteMgr=CAI3533%'"
final = Popen("{0}; {1}; {2}; {3}".format(cmd1, cmd2, cmd3,cmd4),shell=True,stdin=PIPE,stdout=PIPE, stderr=STDOUT, close_fds=True)
stdout, nothing = final.communicate()
print(stdout)
出力: /bin/sh: use: not found /bin/sh: go: not found /bin/sh: SELECT: not found
これは、最初のコマンドを実行した後、sybase sql コンソールではなく bash として別のプロセスを作成するため、もちろんコマンドが認識されないためです。どうすればこれを行うことができますか?