【问题标题】:Running a CMD command through python fails通过 python 运行 CMD 命令失败
【发布时间】:2021-09-26 15:47:21
【问题描述】:

我正在使用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 并没有太大帮助...

【问题讨论】:

  • 您是否从与使用 shell 时相同的当前工作目录运行 python?即G:\Program Files\Wireshark\PCAP>。在python中运行import os; print(os.getcwd())
  • 也可能是路径问题。当您在命令行应用程序中使用当前工作目录时,您正在输入一个 unix 样式的目录字符串。可能值得尝试这个参数:r'G:\Program Files\Wireshark\PCAP\nonvpn-chat-aim-0.pcap'
  • 我没有从同一个目录运行,我尝试这样做: subprocess.run(arg, cwd="G:\....") 没有成功。此外,如果您注意到错误消息 - 它显示正在拆分 pcap 文件 - 这意味着实际的 SplitCap.exe 开始运行,不是吗?

标签: python windows cmd pcap


【解决方案1】:

你可以试试os来执行cmd

os.system()
or
os.popen()

后面可以通过socket获取返回信息

【讨论】:

  • 这不是问题。事实证明,flakes 部分正确,因为问题是在目录之外运行它。我会在自己的回答中解释。
【解决方案2】:

事实证明,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后面的部分,排除完整路径。 (另外,将\ 更改为/

【讨论】:

    猜你喜欢
    • 2011-07-12
    • 2010-10-16
    • 2021-05-18
    • 2016-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多