1

我最初尝试tftpd32.exe使用以下命令从 Expect 运行可执行文件 (),但由于某些未知原因,它会挂起整个脚本:

exec c:/tftpd32.351/tftpd32.exe

因此,决定调用一个批处理文件来启动可执行文件。

我尝试使用以下命令调用批处理文件,但收到一条错误消息,指出 Windows 找不到该文件。

exec c:/tftpd32.351/start_tftp.bat

我也尝试了以下方法,但它没有启动可执行文件:

spwan cmd.exe /c c:/tftpd32.351/start_tftp.bat

批处理文件包含此文件,当我双击它时它运行正常:

start tftpd32.exe

任何帮助将不胜感激。

谢谢

4

1 回答 1

1

从 Tcl 运行该程序的正确方法是:

set tftpd "c:/tftpd32.351/tftpd32.exe"
exec {*}[auto_execok start] "" [file nativename $tftpd]

请注意,在使用时您应该始终使用额外的空参数start(由于其start工作方式很奇怪;它在引号中有一个可选字符串,用于指定要创建的窗口标题,但它往往会误解第一个带引号的字符串,即使保留它没有强制参数)并且您需要使用可执行文件的本机系统名称来运行,因此file nativename.

如果您的expect程序中有旧版本的 Tcl(8.4 或更早版本),您可以这样做:

set tftpd "c:/tftpd32.351/tftpd32.exe"
eval exec [auto_execok start] [list "" [file nativename $tftpd]]

list奇怪eval exec结构中的命令添加了一些必要的引用,否则您将无法生成这些引用。完全按照上面的方法使用它,否则你会得到非常奇怪的错误。(或者升级到不需要那么多代码体操的东西;{*}添加语法是有充分理由的!)

于 2012-06-26T09:54:31.477 回答