我最初尝试使用以下命令从Expect运行可执行文件(tftpd32.exe
),但由于某些未知原因,它会挂起整个脚本:
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
非常感谢任何帮助。
由于
答案 0 :(得分:1)
从Tcl运行该程序的正确方法是:
set tftpd "c:/tftpd32.351/tftpd32.exe"
exec {*}[auto_execok start] "" [file nativename $tftpd]
请注意,在使用start
时,应始终使用额外的空参数(由于start
的奇怪方式;它在引号中有一个可选字符串,用于指定要创建的窗口标题,但是它倾向于误解第一个引用的字符串,即使它没有强制参数也是如此)并且您需要使用可执行文件的本机系统名称来运行,因此file nativename
。
如果你的expect
程序(8.4或之前版本)中有较旧版本的Tcl,你可以这样做:
set tftpd "c:/tftpd32.351/tftpd32.exe"
eval exec [auto_execok start] [list "" [file nativename $tftpd]]
奇怪的list
构造中的eval exec
命令增加了一些必要的引用,否则你将无法生成。完全按照上面使用它,你会得到非常奇怪的错误。 (或升级到你不需要几乎所有代码体操的东西;添加{*}
语法是有充分理由的!)