运行 通过 python 的 CMD 命令失败

Running a CMD command through python fails

我正在使用 SplitCap 将我的 pcaps 分成会话。但是,鉴于我有数百个,我想写一些东西来为我做这件事。

此 CMD 命令成功运行。

G:\Program Files\Wireshark\PCAP>"G:\Program Files\Wireshark\SplitCap.exe" -r nonvpn-chat-aim-0.pcap -s session -o SplitPCAP
Splitting pcap file into seperate pcap files...
100%
Please wait while closing all file handles...

但是,完全相同的命令在 python 中失败:

>>> arg
['G:/Program Files/Wireshark/SplitCap.exe', '-r', 'G:/Program Files/Wireshark/PCAP/nonvpn-chat-aim-0.pcap', '-s', 'session', '-o', 'SplitPCAP']
>>> subprocess.run(arg)
Splitting pcap file into seperate pcap files...
10%
���� ����� �����: System.NotSupportedException: ����� ����� ������ ���� �����.
   �-  System.Security.Permissions.FileIOPermission.EmulateFileIOPermissionChecks(String fullPath)
   �-  System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   �-  System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options)

我不确定如何从这里开始。这个错误似乎在 C# 中并且在内部查看 subprocess.py 并没有多大帮助...

你可以尝试os执行cmd

os.system()
or
os.popen()

后面的可以通过socket

得到return信息

原来 SplitCap 的文件参数不喜欢我使用它们的方式。解决方案是将 subprocess.run(arg) 更改为 subprocess.run(arg, cwd="'G:/Program Files/Wireshark/SplitCap.exe'",然后将 arg 更改为:

['G:/Program Files/Wireshark/SplitCap.exe', '-r', 'nonvpn-chat-aim-0.pcap', '-s', 'session', '-o', 'SplitPCAP']

也就是把-r后面的部分改成排除完整路径。 (还有,将 \ 更改为 /