Windows 7上でOracle Data Integrator 11gを使用して一部のインタフェースをテストしています。 すべてのインタフェースで、LKM MSSQL to Oracle(BCP/SQLLDR) 「Jython経由でSQLLDRを呼び出す」コマンドを実行します。私が実行しなかったODI - Windowsシェル上でJython経由でSQLLDRを呼び出します。
sqlldr control=control_file.ctl log=log_file.log userid=ODI_STAGE/ODI_STAGE > shell_output.out
:それはWindowsシェル上の形式の文字列を実行する必要があり
exitCode = os.system(sqlldr + " control=" + tempSessionFilePrefix + ".ctl log=" + tempSessionFilePrefix + ".log " + "userid=" + "<% out.print(odiRef.getInfo("DEST_USER_NAME")); %>" + "/" + "<% out.print(odiRef.getInfo("DEST_PASS")); %>" + tnsnameOption + " > " + tempSessionFilePrefix +".out");
:いくつかのinvesetigation後、私は問題の根本は、次のコード行であることがわかりましたコマンドプロンプトで直接生成された文字列であり、問題なく動作しました。
コードで少し演奏した後、に置き換えてos.system
を動作させることができませんでした。私もそれが全部の仕事をするために、コマンドプロンプト(> shell_output.out
)の出力に含まを保存しようとする文字列の最後の部分を削除する必要があります。
exitCode = subprocess.call([sqlldr, "control=" + tempSessionFilePrefix + ".ctl", "log=" + tempSessionFilePrefix + ".log", "userid=" + "<% out.print(odiRef.getInfo("DEST_USER_NAME")); %>" + "/" + "<% out.print(odiRef.getInfo("DEST_PASS")); %>" + tnsnameOption], shell=True);
この1がスムーズに動作します。
シェルの出力に関しては、プロンプトへのコマンドの代わりにSQLLDRの引数の一部として解析される '>' charcaterで始まる文字列部分であると思われます。 今、私はそれなしで暮らすことができますが、シェル出力を得るための簡単な回避策があるかどうかを知りたいと思っています。