如何利用&&引用;TCL 8.0版中的命令,使proc或exec命令在后台运行,即在windows 7上并行运行?
我正在从事一个项目,我正在使用如何利用&&引用;TCL 8.0版中的命令,使proc或exec命令在后台运行,即在windows 7上并行运行?,windows,video,ffmpeg,video-streaming,tcl,Windows,Video,Ffmpeg,Video Streaming,Tcl,我正在从事一个项目,我正在使用FFMPEG捕获视频。FFMPEG命令是: ffmpeg -f dshow -t 00:00:10 -i "video=Integrated Webcam" -b 5000k -s 1280x720 c:/test/sample.avi 链接:使用以下命令: exec myprog & 在这里,他们没有指定什么是myprog 链接:使用命令: eval exec [linsert $args 0 exec] >> $tempFile &a
FFMPEG
捕获视频。FFMPEG
命令是:
ffmpeg -f dshow -t 00:00:10 -i "video=Integrated Webcam" -b 5000k -s 1280x720 c:/test/sample.avi
链接:使用以下命令:
exec myprog &
在这里,他们没有指定什么是myprog
链接:使用命令:
eval exec [linsert $args 0 exec] >> $tempFile &
此处,该命令不被接受为eval
,并且exec
是一个接一个的,因此它将exec
作为变量
使用write right命令帮助我,该命令可用于在
TCL 8.0版
和windows7
的后台捕获我的视频 这条线的问题是:
eval exec [linsert $args 0 exec] >> $tempFile &
这是多重的。首先,您有一个双exec
(不太可能是您想要的!)。第二,你在最后有一个部分没有被列表保护,尽管它运行在一个文件名中经常有空格的平台上,这使得文件名有点像一颗等待爆炸的定时炸弹(尽管我认为它在Windows7上没有在旧版本上那么糟糕,在旧版本中,常见的可写位置的文件名中有空格)
现在,如果您使用的是受支持的Tcl版本,我们建议您将其写成:
exec {*}$args >> $tempFile &
(事实上,这类事情是{*}
语法的关键用例之一。)
然而,你是在一个古老的版本上,所以我们必须以另一种方式做事情。我们得到了上面的内容,这仍然很有帮助,因为它指导我们需要在整个列表中插入非列表参数的位置:
eval [linsert [linsert $args 0 exec] end >> $tempFile &]
是的,这很难读,而且容易出错。你认为我们为什么要改变基本语言来解决这个问题?(几乎没有人再直接使用
eval
,这大大降低了大多数人代码的缺陷率。)这一行的问题:
eval exec [linsert $args 0 exec] >> $tempFile &
这是多重的。首先,您有一个双exec
(不太可能是您想要的!)。第二,你在最后有一个部分没有被列表保护,尽管它运行在一个文件名中经常有空格的平台上,这使得文件名有点像一颗等待爆炸的定时炸弹(尽管我认为它在Windows7上没有在旧版本上那么糟糕,在旧版本中,常见的可写位置的文件名中有空格)
现在,如果您使用的是受支持的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“视频=集成网络摄像头”c:/test/sample-a.avi>&c:/temp.txt&
}
A.
//此处>&转移,日志将保存在temp.tet文件中,&有助于在后台运行命令。
以下是答案,它在windows 7平台上工作,使用TCL 8.0版和FFMPEG在后台捕获视频
proc a{}{
exec ffmpeg-f dshow-t 00:00:10-i“视频=集成网络摄像头”c:/test/sample-a.avi>&c:/temp.txt&
}
A.
//在这里>&T,日志将保存在temp.tet文件中,并帮助在后台运行命令。
Tcl 8.0太旧了,很难告诉1)它将如何与现代操作系统交互,以及2)如何正确处理它。就我自己而言,我几乎记不起如何编写8.3而不混入只在8.4及更高版本中可用的代码。“myprog”作为示例文本,将替换为您自己的可执行命令字符串。“eval exec
”本身并不是问题,eval
只是从其参数中汇编一个命令调用并执行:exec
作为调用中的第一个字是完全有效的。当您尝试它时,$args
的内容可能有问题。peter,你能给我任何工作代码,它将与tcl 8.4一起工作,使用“&”或其他任何选项使命令在后台运行吗<代码>eval exec[auto_execok dir]&或exec ffmpeg&
对于此代码:proc a{}{exec ffmpeg-f dshow-t 00:00:10-i“video=集成网络摄像头”-b 5000k-s 1280x720 c:/test/sample-a.avi&}a这也不起作用,为了使命令在后台运行此代码:proc a{}{eval exec[ffmpeg-f dshow-t 00:00:10-i“video=Integrated Webcam”-b 5000k-s 1280x720 c:/test/sample-a.avi]&}a我遇到了这个错误:-%source c:/other/a/d.tcl无效的命令名“ffmpeg”tcl 8.0太旧了,很难说1)它将如何与现代操作系统交互,2)如何正确处理它。就我自己而言,我几乎记不起如何编写8.3而不混入只在8.4及更高版本中可用的代码。“myprog”作为示例文本,将替换为您自己的可执行命令字符串。“eval exec
”本身并不是问题,eval
只是从其参数中汇编一个命令调用并执行:exec
作为调用中的第一个字是完全有效的。当您尝试它时,$args
的内容可能有问题。peter,