【问题标题】:How to make use of "&" command in TCL version 8.0 to make a proc or exec command run in background i.e in parallel on windows 7?如何利用 TCL 8.0 版中的“&”命令使 proc 或 exec 命令在后台运行,即在 Windows 7 上并行运行?
【发布时间】:2018-04-29 12:53:09
【问题描述】:

我正在做一个项目,我使用FFMPEG 来捕捉视频。 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是什么。

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

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

这里不接受命令,因为evalexec是一个接一个,所以它把exec作为一个变量。

帮助我,使用写入权限命令,可以使用TCL version 8.0Windows 7 在后台捕获我的视频。

【问题讨论】:

  • Tcl 8.0 太老了,很难说 1) 它将如何与现代操作系统交互,以及 2) 如何正确处理它。就我自己而言,我几乎不记得如何编写 8.3 而不混合仅在 8.4 及更高版本中可用的代码。 “myprog”旨在作为示例文本,用您自己的可执行命令字符串替换。 "eval exec" 本身没有问题,eval 只是从它的参数中组装一个命令调用并执行它:exec 作为调用中的第一个单词是完全有效的。大概是 @ 的内容有问题987654337@当你尝试它。
  • peter,你能给我任何工作代码吗?可以使用“&”或其他任何其他选项来让命令在后台运行吗??
  • 试试; eval exec [auto_execok dir] &exec ffmpeg &
  • 对于此代码:proc a {} { exec ffmpeg -f dshow -t 00:00:10 -i "video=Integrated Webcam" -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 invalid command name "ffmpeg"

标签: windows video ffmpeg video-streaming tcl


【解决方案1】:

这一行的问题:

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

是多重的。首先,你有一个双重exec(不太可能是你想要的!)。其次,尽管在文件名中经常有空格的平台上运行,但最后有一块没有受到列表保护,这使得文件名有点像等待爆炸的定时炸弹(尽管我认为它不是在 Windows 7 上和在旧版本上一样糟糕,其中 common 可写位置在文件名中有空格)。

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

exec {*}$args >> $tempFile &

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

但是,您使用的是旧版本,因此我们必须以另一种方式做事。它仍然有助于我们获得上述内容,因为它指导我们需要在整个列表中插入非列表参数的位置:

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

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

【讨论】:

  • 这是一个 TCL 问题。受访者最适合回答这个问题。
  • @Mulvya,但提供的答案不起作用。没有选项,用于放置 ffmpeg 命令。
  • @Donal Fellows 我应该在哪里传递 ffmpeg cpmmand:- eval [linsert [linsert $args 0 exec] end >> $tempFile &]
  • @Donal Fellows 我应该如何通过 "ffmpeg -f dshow -t 00:00:10 -i "video=Integrated Webcam" -b 5000k -s 1280x720 c:/test/sample.avi "此 ffmpeg 命令与上述命令相同。
  • @Donal Fellows 我应该通过什么来代替“$tempFile”这个变量??
【解决方案2】:

这是答案,它适用于 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.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 2019-02-18
    相关资源
    最近更新 更多