【问题标题】:'c:\Program' is not recognized as an internal or external command, operable program or batch file\'c:\\Program\' 不是内部或外部命令、可运行程序或批处理文件
【发布时间】:2022-10-07 22:56:49
【问题描述】:

我正在尝试在 python 中执行命令,但它不起作用。命令语法在命令提示符下工作正常,但在 python 中不行。

我使用的代码是 import os os.system('"c:\\Program Files\\Wireshark\\tshark.exe" -i Ethernet -i Wi-Fi -w cap.pcapng tshark -nq -z endpoints,tcp -z endpoints,udp | gawk "{ print $3,$4,$5,$6 }"') | grep [0-9]

【问题讨论】:

  • 使用subprocess 和参数列表来避免这种情况。然后用python本地处理该行,不要使用grep和awk ...
  • @OldBill 不是原因,而是正确的:不要使用完全废话且不可移植的 MSYS

标签: python awk cmd wireshark tshark


【解决方案1】:

这个完整的解决方案应该有效

import subprocess

p = subprocess.Popen([r'c:Program FilesWireshark	shark.exe',
                  '-i','Ethernet','-i','Wi-Fi',
                  '-w','cap.pcapng','tshark','-nq',
                  '-z','endpoints,tcp','-z','endpoints,udp'],
                  stdout=subprocess.PIPE)

for line in p.stdout:
    toks = line.decode().split()   # get fields of each line like awk
    s = "{},{},{},{}".format(toks[2],toks[3],toks[4],toks[5])  # format the string
    if any(d in s for d in "0123456789"):  # look for digits
        print(s)
p.wait()
  • 它使用subprocess.Popen 和参数列表而不是字符串来处理包含空格的参数
  • 它使用 r(原始)前缀处理反斜杠
  • 它摆脱了 Windows 中非原生的 awk 和 grep,因此只需要 python(和 wireshark)来运行脚本。

【讨论】:

    【解决方案2】:

    尝试转义双引号

    '"c:\Program Files\Wireshark\tshark.exe" ...

    【讨论】:

    猜你喜欢
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    • 2018-08-25
    • 2014-06-01
    相关资源
    最近更新 更多