Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何利用&&引用;TCL 8.0版中的命令,使proc或exec命令在后台运行,即在windows 7上并行运行?_Windows_Video_Ffmpeg_Video Streaming_Tcl - Fatal编程技术网

如何利用&&引用;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,