【问题标题】:Python Subprocess nbtstat "cannot find the file"Python 子进程 nbtstat “找不到文件”
【发布时间】:2018-05-22 21:31:25
【问题描述】:

我很难让 nbtstat 命令在 python 中运行。每当我运行以下代码时,都会收到错误“WindowsError: [Error 2] The system cannot find the file specified”。

print(subprocess.check_output(["nbtstat","-A",ipaddress]))

我也试过

print(subprocess.check_output(["C:\\Windows\\System32\\nbtstat.exe","-A",ipaddress]))

print(subprocess.check_output("nbtstat -A "+ipaddress))

这些版本都不起作用。

为了让它正常运行,我从命令中遗漏了什么吗?


在运行 python 2.7.11 的 Windows 上(无法更新)

【问题讨论】:

  • 你能从运行 Python 的 Command Prompt 运行 nbtstat 吗?如果您尝试通过另一个 shell(即subprocess.check_output(["cmd", "/c", "nbtstat"]))间接运行它,您会得到什么?
  • @abarnert - 在 64 位 Windows 上 %WINDIR%\system32 实际上包含 64 位二进制文​​件(如果没有特定版本的 64 位版本,则为 32 位二进制文​​件)
  • @zwer 是的,我记得在我写完之后……但同时,在搜索时,我发现nbtstat 实际上 32位的,至少在我能找到记录的最后一个版本,维基百科也同意,所以……我正打算回来删除我的评论。
  • 出于好奇(很好的答案!)——当你说“在命令提示符中输入它可以正常工作”时——你只是输入nbtstat,还是输入c:\Windows\system32\nbtstat.exe ?
  • 是的,我看到了答案(因此恭维);只是……令人惊讶……cmd.exe 会隐式重定向显式请求以运行 32 位 system32 复制到 sysnative

标签: python subprocess


【解决方案1】:

您需要将命令编写为可执行文件的路径,并将 \System32 换成 \sysnative 。

此命令按需要工作:

print(subprocess.check_output(["C:\\Windows\\sysnative\\nbtstat.exe","-A",ipaddress]))

This page describes the sysnative folder, 但我会在这里给出一个简短(而且非常简单化)的解释:

System32 和 Sysnative 实际上是同一个文件夹,只是通过不同的名称访问,但如果使用该文件夹的程序是 32 位的,那么您用于访问此文件夹的名称会更改该文件夹中可用的选项。如果 32 位程序使用 System32 路径,则只有 32 位选项可用,所有 64 位程序都被隐藏。如果它改为使用 Sysnative 路径,则 64 位选项可用。

事实证明,nbtstat.exe 实际上是一个 64 位程序,因此当 32 位脚本或其他程序试图通过 System32 文件夹打开它时,它会返回一个错误,指出该程序不存在.而且由于查找命令的默认路径是System32,如果不指定路径,也会说程序不存在。

因此,为了让 32 位程序使用 64 位命令可执行文件,您必须显式指定可执行文件的路径,并且必须通过 Sysnative 路径而不是 System32 路径指定。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    相关资源
    最近更新 更多