我正在尝试使用一堆选项运行 tshark exe 并输出到 fil (见下文)。然而,我真的坚持要使用的 system() 命令的正确语法。
我以前在这里得到过帮助,甚至已经让它与 dos for 循环一起工作,但这超出了我的能力范围。我已经尝试了各种转义序列,并将整个命令封装在 2-3 个引号中,按照我在 SO 上看到的其他建议。
命令是:
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 是否更容易?另外,到目前为止我得到的建议是在系统调用中使用“start”,如果这是错误的,请随时指出。
对于这些问题我深表歉意,但我最近才接触 C++,而且我仍在适应一些事情......
我应该补充一点,我还试图让它作为后台作业运行,并让我的脚本的其余部分在运行时继续运行。
大家的答案都是almost正确的。尝试这个:
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");
另请注意,重定向运算符>
需要转义为^>
这样就不用重定向输出start
命令(没什么)它重定向 tshark 命令的输出。这>
需要解释为cmd.exe
所以论证start
必须是cmd
.
The start
仅当您要在后台运行的程序是控制台应用程序(即通常在命令提示符窗口中运行的程序)时才需要命令。如果它是普通的 Windows 应用程序,那么它将与启动它的应用程序同时运行,因此无需使用start
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)