我试图用一堆选项运行tshark exe并输出到一个fil(见下文)。 不过,我真的坚持使用system()命令的正确语法。
我以前在这里有过帮助,甚至已经得到它与DOS for循环,但是这是超越我。 我已经尝试了各种各样的转义序列,并将所有命令封装在2-3个引号中,就像我在SO上看到的其他build议一样。
该命令是:
C:\Program Files\Wireshark\tshark.exe -a duration:130 -i 3 -T fields -e frame.number -e frame.time -e _ws.col.Info > c:\test\output.csv
我试过了:
system("start C:\\Program\ Files\\Wireshark\\tshark.exe -a duration:130 -i 3 -T fields -e frame.number -e frame.time -e _ws.col.Info > c:\\test\\tshark2.csv &"); system("\"start C:\\Program\ Files\\Wireshark\\tshark.exe -a duration:130 -i 3 -T fields -e frame.number -e frame.time -e _ws.col.Info\" > c:\\test\\tshark2.csv &");
…在其他人中。
如果不是在这个目录中的空间,我可以通过这个想法。 更改为运行tshark的目录更容易吗? 另外,我现在的build议是在系统调用中使用“开始”,如果这是错误的,请随时说。
道歉的问题,但我最近才进入C + +,我仍然习惯了一些事情…
编辑
我应该补充说,我也试图让这个作为后台作业运行,并为我的脚本的其余部分继续运行时…
更新 – 解决scheme
到达与下面的答案相同的解决scheme。 根据在后台运行任务的原始要求,下面的命令可以让我做到这一点,并输出到一个文本文件:
system("start \"\" cmd /c C:/\"Program Files\"/Wireshark/tshark.exe -a duration:130 -i 3 -T fields -e frame.number -e frame.time -e _ws.col.Info ^> c:/test/output.csv");
大家的回答几乎是正确的。 尝试这个:
system("\"C:\\Program Files\\Wireshark\\tshark.exe\" -a duration:130 -i 3 -T fields -e frame.number -e frame.time -e _ws.col.Info > c:\\test\\tshark2.csv");
在你的问题的最后有一个'&'。 这用于Linux和其他* nix系统在后台运行作业。 在Windows上,'&'是一个命令分隔符(允许你在同一行放置多个命令)。 要在后台运行,您需要使用start
命令。 但是,如果启动命令的第一个参数用引号引起来,则start
命令会将其视为窗口标题。 真正的命令然后成为第二个参数。 所以你应该在实际之前在引号中添加一个虚拟参数:
system("start \"\" cmd /c \"C:\\Program Files\\Wireshark\\tshark.exe\" -a duration:130 -i 3 -T fields -e frame.number -e frame.time -e _ws.col.Info ^> c:\\test\\tshark2.csv");
还要注意,重定向操作符>
需要被转义为^>
以便重定向tshark命令的输出而不是重定向start
命令的输出。 >
需要被cmd.exe
解释,所以start
的参数必须是cmd
。
只有当你想在后台运行的程序是一个控制台应用程序(即通常在命令提示符窗口中运行的程序)时才需要start
命令。 如果它是一个正常的Windows应用程序,那么它将与启动它的应用程序同时运行,所以不需要使用start
。
system("start \"C:\\Program Files\\Wireshark\\tshark.exe\" -a duration:130 -i 3 -T fields -e frame.number -e frame.time -e _ws.col.Info > c:\\test\\tshark2.csv &");
正确的字符串是:
"start \"\" \"C:\\Program Files\\Wireshark\\tshark.exe\" -a duration:130 -i 3 -T fields -e frame.number -e frame.time -e _ws.col.Info > c:\\test\\tshark2.csv &"
(根据这个Q / A ,你需要把空的引号字符串( ""
)作为第一个参数。
或者,没有start
命令:
"\"C:\\Program Files\\Wireshark\\tshark.exe\" -a duration:130 -i 3 -T fields -e frame.number -e frame.time -e _ws.col.Info > c:\\test\\tshark2.csv &"
你只能在"
(在\
c ++ => \"
转义)包含空格的路径,空格不是,不能也不需要转义。
系统函数调用不需要开始。 只要给系统(C:\ Program \ Files \ Wireshark \ tshark.exe …之后的参数);
只是这样做:
系统(“开始”\ C:\ Program \ Files \ Wireshark \ tshark.exe -a持续时间:130 -i 3 -T字段-e frame.number -e frame.time -e _ws.col.Info> c: \ test \ tshark2.csv \“&”);