【发布时间】:2014-05-22 16:40:35
【问题描述】:
我需要在 TeamCity 的构建过程中运行一个名为 sc.exe 的应用程序。这个小应用程序打开了通往 Sauce Labs 的隧道,应用程序本身运行良好。此应用程序的功能之一是当它启动并准备好支持通过隧道对 Sauce 进行测试时,它会输出消息 Sauce Connect is up, you may now start your tests. 该应用程序需要继续在本地运行以保持该隧道打开。
sc.exe 在建立连接后不会退出,但我需要构建步骤来发送退出代码,以便它可以知道隧道已启动并且我们准备好了。我希望 Perl 脚本与 0 一起使用 exit 并让 sc.exe 进程运行。我用 Perl 写了这个小运行脚本:
#!/user/bin/perl
use strict;
use warnings;
my $result = `sc -v --pac file://browsermob.js -u $ENV{SAUCE_USER_NAME} -k $ENV{SAUCE_API_KEY}`;
for (my $i = 0; $i < 60; $i++) {
if ($result =~ /Sauce Connect is up, you may start your tests\./) {
print $result;
exit 0;
}
sleep(1);
}
die "Did not detect open Sauce Connect tunnel.";
现在,请记住,当我从终端运行它时,反引号中的系统调用确实有效,并且sc.exe 的输出在这种情况下与预期的一样。当我运行这个 Perl 脚本时,隧道确实启动了——我可以登录到 Sauce Labs 并看到隧道处于活动状态。但是,此脚本既不会以0 退出,也不会以die 退出。它能做什么?
像往常一样,我觉得我错过了一些如此明显的东西。
在 Win 7 x64 或 Windows Server 2008 上运行,结果相同。
【问题讨论】:
-
perl 等待 sc 完成。
标签: windows multithreading perl process exit