首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何利用TCLVersion8.0中的"&“命令在后台运行proc或exec命令,即在windows 7上并行运行?

如何利用TCLVersion8.0中的"&“命令在后台运行proc或exec命令,即在windows 7上并行运行?
EN

Stack Overflow用户
提问于 2017-11-16 05:01:06
回答 2查看 264关注 0票数 0

我正在做一个项目,在那里我使用FFMPEG捕捉视频。FFMPEG命令是:

代码语言:javascript
复制
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使用以下命令:

代码语言:javascript
复制
exec myprog &

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

链接:Running shell commands in background, in a tcl proc使用命令:

代码语言:javascript
复制
 eval exec [linsert $args 0 exec] >> $tempFile &

在这里,命令不被接受,因为evalexec是一个接一个的命令,因此它将exec作为变量。

帮助我,使用写右命令,它可以用来用TCL version 8.0Windows 7在后台捕捉我的视频。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-18 08:08:51

这一行的问题是:

代码语言:javascript
复制
eval exec [linsert $args 0 exec] >> $tempFile &

是多重的。首先,您有一个双exec (不太可能是您想要的!)第二,在文件名中通常有空格的平台上运行的平台上没有列表保护,这使得文件名有点像等待运行的定时炸弹(虽然我认为Windows 7的情况并不像以前的版本那样糟糕,因为在旧版本中,普通的可写位置在文件名中有空格)。

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

代码语言:javascript
复制
exec {*}$args >> $tempFile &

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

然而,你是在一个古老的版本,所以我们必须采取另一种方式。当我们需要在整个列表中插入非列表参数时,它仍然帮助我们获得了上面的内容:

代码语言:javascript
复制
eval [linsert [linsert $args 0 exec] end >> $tempFile &]

是的,这是很难读和容易写错。为什么您认为我们确实改变了基本语言来解决这个问题呢?(几乎没有人再直接使用eval了,这大大降低了大多数人代码中的缺陷率。)

票数 5
EN

Stack Overflow用户

发布于 2017-11-21 11:57:10

以下是在windows 7平台上使用TCLVersion8.0和FFMPEG在后台捕捉视频的答案。

代码语言:javascript
复制
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.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47321957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档