【发布时间】:2016-09-09 12:29:36
【问题描述】:
我有一个可执行文件(没有源文件,只有 .exe 文件),我试图在 .sas 文件中运行,使用对未命名管道的文件引用:
%macro process_file(path);
%let filepath = %trim(&path.);
%let filename = %scan(&path., -1, %str(\));
filename flf pipe "&progpath. ""&filepath."" ""&workpath.\&filename..log""";
data hnd_tmp;
length line $1024.;
infile flf; input;
line = left(trim(compbl(_infile_)));
run;
%mend process_file;
此脚本基本上返回阻塞特定文件(文件路径)的进程列表,并将输出返回到日志文件(第三个参数)。
当我在 SAS 9.3 中运行我的代码时,它运行良好并且我收到了所需的输出,但是当我使用 SAS Enterprise Guide 5.1 时,脚本会引发异常:
Unhandled Exception: System.Exception: Could not list processes locking resource. Failed to get size of result.
at ProcessHelpers.FileUtil.WhoIsLocking(String path)
at ConsoleApplication1.Program.start(String[] args)
at ConsoleApplication1.Program.Main(String[] args
我无法调试应用程序,所以这个异常几乎没有告诉我任何信息。
我想知道在 SAS BASE 和 SAS Enterprise Guide 中运行程序之间是否存在任何差异,例如环境变量、系统选项等 - 可能导致程序抛出异常的东西。
我一直在 SAS 文档和论文中寻找解决方案,但到目前为止没有运气。
你有什么想法吗?提前致谢。
已编辑以提供更多详细信息,请参阅 cmets。
该解决方案已在联网服务器上直接测试,程序抛出异常。我可以在本地的 RACE 虚拟机上复制这种情况,也可以在服务器上本地复制这种情况。所有服务器都在 Windows 上运行。硬编码命令没有帮助,仍然存在问题。 XCMD 已打开。不是在本地调用代码似乎有问题。
【问题讨论】:
-
系统变量、路径等可能通过 EG 有所不同。你可以执行 X 命令来回显这些值,看看是否与直接登录时有所不同?
-
@DomPazz:我不完全确定“X 命令”是什么意思,我运行了一个代码,确实从 BASE 和 EG 获取所有宏变量,我正在尝试检查它们并发现差异。可用here @ pastebin。
-
X <command>;运行来自 SAS 的操作系统命令。它的工作方式类似于您正在使用的 PIPE 文件名。您可以运行一些操作系统回显以查看环境之间的不同之处。如果这是问题所在,那么您可以让您的管理员帮助您解决它。 -
当您在 EG 中运行它时,您是在连接到“本地 SAS 服务器”还是在连接到(联网的)SAS 服务器?
-
另外,尝试将宏代码排除在等式之外。对宏生成的命令进行硬编码,并检查它是否在两者上运行。换句话说,想出最简单的命令让它失败,这样你就可以排除其他一切。
标签: sas executable sas-macro enterprise-guide