运行 来自 java 的 pmcmd
Running pmcmd from java
我正在尝试 运行 pmcmd 并传递来自 java 的参数。这是我的代码:
String cmd="C:\Informatica\9.6.1\clients\PowerCenterClient\CommandLineUtilities\PC\server\bin\pmcmd.exe";
final Process cmdProcess;
cmdProcess = Runtime.getRuntime().exec(new String[]{cmd,"connect -sv IS_NAME -d DOMAIN_NAME -u USER -p PWD"});
cmdProcess.getOutputStream().close();
问题是我无法获得所需的输出。我收到以下错误:
ERROR: Unknown command [connect]
当我在命令行上尝试相同的命令时,它起作用了。
pmcmd>connect -sv IS_NAME -d DOMAIN_NAME -u USER -p PWD
输出:
Connected to Integration Service:[IS_NAME].
谁能告诉我我做错了什么?
pmcmd
有两种模式,命令行模式和交互模式。 connect
命令仅在交互模式下有效。
从java调用时,您使用的是命令行模式,不需要先连接。您可以直接调用您打算执行的命令 运行(例如 startWorkflow)并使用该命令提供连接参数,如下所示:
pmcmd startworkflow -sv MyIntService -d MyDomain -u seller3 -p jackson ‑f SalesEast wf_SalesAvg
更多详情here。
我必须在 pmcmd 进程中发出命令。所以我修改了我的代码并且它有效:
String cmd="C:\Informatica\9.6.1\clients\PowerCenterClient\CommandLineUtilities\PC\server\bin\pmcmd.exe";
final Process cmdProcess;
cmdProcess = Runtime.getRuntime().exec(new String[]{cmd,""});
OutputStream out = cmdProcess.getOutputStream();
out.write("connect -sv IS_NAME -d DOMAIN_NAME -u USER -p PWD".getBytes());
out.close;
(在根据 OP 工作后添加我的评论作为答案)
您的命令行示例表明 connect -sv ...
是在 pmcmd 进程中发出的,而不是作为参数提供的。
所以您应该将其发送到进程的 STDIN(由 cmdProcess.getOutputStream()
访问)而不是作为参数传递给调用。
我正在尝试 运行 pmcmd 并传递来自 java 的参数。这是我的代码:
String cmd="C:\Informatica\9.6.1\clients\PowerCenterClient\CommandLineUtilities\PC\server\bin\pmcmd.exe";
final Process cmdProcess;
cmdProcess = Runtime.getRuntime().exec(new String[]{cmd,"connect -sv IS_NAME -d DOMAIN_NAME -u USER -p PWD"});
cmdProcess.getOutputStream().close();
问题是我无法获得所需的输出。我收到以下错误:
ERROR: Unknown command [connect]
当我在命令行上尝试相同的命令时,它起作用了。
pmcmd>connect -sv IS_NAME -d DOMAIN_NAME -u USER -p PWD
输出:
Connected to Integration Service:[IS_NAME].
谁能告诉我我做错了什么?
pmcmd
有两种模式,命令行模式和交互模式。 connect
命令仅在交互模式下有效。
从java调用时,您使用的是命令行模式,不需要先连接。您可以直接调用您打算执行的命令 运行(例如 startWorkflow)并使用该命令提供连接参数,如下所示:
pmcmd startworkflow -sv MyIntService -d MyDomain -u seller3 -p jackson ‑f SalesEast wf_SalesAvg
更多详情here。
我必须在 pmcmd 进程中发出命令。所以我修改了我的代码并且它有效:
String cmd="C:\Informatica\9.6.1\clients\PowerCenterClient\CommandLineUtilities\PC\server\bin\pmcmd.exe";
final Process cmdProcess;
cmdProcess = Runtime.getRuntime().exec(new String[]{cmd,""});
OutputStream out = cmdProcess.getOutputStream();
out.write("connect -sv IS_NAME -d DOMAIN_NAME -u USER -p PWD".getBytes());
out.close;
(在根据 OP 工作后添加我的评论作为答案)
您的命令行示例表明 connect -sv ...
是在 pmcmd 进程中发出的,而不是作为参数提供的。
所以您应该将其发送到进程的 STDIN(由 cmdProcess.getOutputStream()
访问)而不是作为参数传递给调用。