コンソールウィンドウが1つしか開かれていないため、Python 3で新しいプロセスを作成して、「同じセッション」で複数のコマンドを実行しようとしています。何かがメモリに格納されているDB2 LUWデータベースに関連するものです。次のコードで「winshell.py」というファイルを作成しました。
import sys
import subprocess
def shell_execute(cmd, filename=""):
'''
Executes a command on SO and returns STDOUT and STDERR to a variable.
If filename is used, then write STDOUT and STDERR to a file.
'''
try:
output = subprocess.check_output(cmd, shell=True)
str = output.decode("1252")
str = str.replace("\r","")
if filename:
file = open(filename, "a")
file.write(str)
file.close()
return "Output sent to file: "+filename
else:
return str
except subprocess.CalledProcessError as cpe:
str = cpe.output.decode("1252")
if filename:
file = open(filename, "a")
file.write(str)
file.close()
else:
return str
except Exception as ex:
format(ex)
次に、別の Python プログラムから実行します。
winshell.shell_execute( 'db2 "CONNECT TO AGRIA"', filename )
winshell.shell_execute( 'db2 "CONNECT RESET"', filename )
winshell.shell_execute( 'db2 "CONNECT TERMINATE"', filename )
返されるコードは次のとおりです。
Database Connection Information
Database server = DB2/NT64 10.5.0
SQL authorization ID = DB2ADMIN
Local database alias = AGRIA
SQL1024N A database connection does not exist. SQLSTATE=08003
DB20000I The TERMINATE command completed successfully.
明らかに connect ステートメントが正常に実行されますが、終了した直後に接続が失われます。コンソール プロンプトでは、これら 3 つのコマンドは完全に機能します。
コンソールで単一のプロセス/スレッドとしてセッションを作成する方法を知っている人はいますか?