如何使用TCL 8.0版本中的“&”命令在后台运行proc或exec命令,即在Windows 7上并行运行?

我正在使用FFMPEG捕捉video的项目。 FFMPEG命令是:

 ffmpeg -f dshow -t 00:00:10 -i "video=Integrated Webcam" -b 5000k -s 1280x720 c:/test/sample.avi 

链接: https : //www.tcl.tk/man/tcl8.5/tutorial/Tcl26.html使用命令:

 exec myprog & 

在这里他们没有指定什么是myprog

链接: 在后台运行shell命令,在tcl proc中使用命令:

  eval exec [linsert $args 0 exec] >> $tempFile & 

这里的命令不被接受为evalexec是一个接一个的,所以它把exec作为一个variables。

帮助我,写权利的命令,可用于捕获我的video在TCL version 8.0Windows 7的背景。

这一行的问题:

 eval exec [linsert $args 0 exec] >> $tempFile & 

是多重的。 首先,你有一个双重exec (不太可能是你想要的!)。 其次,尽管运行在平台上的文件名经常有空格,但是最后还是有一段文件没有被列表保护,这使得文件名有点像时间炸弹一样等待下线(尽管我认为这不是在Windows 7上与在较旧版本上一样坏,其中常见的可写位置在文件名中具有空格)。

现在,如果您使用的是支持的Tcl版本,那么我们建议您将其编写为:

 exec {*}$args >> $tempFile & 

(事实上​​,这种事情是{*}语法的关键用例之一。)

然而,你是一个古老的版本,所以我们必须以其他方式做事。 它仍然有帮助,因为它指导我们需要在整个列表中插入非列表参数:

 eval [linsert [linsert $args 0 exec] end >> $tempFile &] 

是的,这很难阅读,而且容易出错。 你为什么认为我们改变了基础语言来解决这个问题呢? (几乎没有人直接使用eval ,这大大降低了大多数人的代码缺陷率。)

下面是答案,它适用于Windows 7平台,TCL版本8.0和FFMPEG在后台捕获视频。

 proc a {} { exec ffmpeg -f dshow -t 00:00:10 -i "video=Integrated Webcam" c:/test/sample-a.avi >& c:/temp.txt & } a // here >& divert the, the log will be saved in temp.tet file and & helps to run the command in background.