【问题标题】:Python subprocess.Popen() does not find executablePython subprocess.Popen() 找不到可执行文件
【发布时间】:2021-11-30 01:34:18
【问题描述】:

我正在编写一个应该在新子进程中运行命令的脚本。目前我为此使用 python subprocess.Popen()。我的问题是我可以运行“dir”之类的命令,但不能运行已安装的程序。当我打开 cmd 提示符并编写“program -h”时,我得到了正常的帮助输出。当我尝试使用 Popen() 打开它时,我收到一个程序无法找到的错误。就好像他没有找到可执行文件,即使我手动查找时 cmd 提示可以找到它。对于测试,我使用 ncat 作为示例程序。

import time
from subprocess import *
import subprocess

execom = "ncat -h"  # DOES NOT WORK IN PYTHON BUT MANUALLY IN CMD
execom1 = "ncat -h -e cmd"  # DOES NOT WORK IN PYTHON BUT MANUALLY IN CMD
execom2 = "dir"  # WORKS
p = Popen(execom, shell=True)

out = p.communicate()[0]

有人知道如何解决这个问题吗?

编辑: 我得到了提示 2e0byo 的解决方案。我添加了系统变量的路径,但系统需要额外重启才能通过它。它无需从 cmd 提示符重新启动即可工作,但不能从 python 脚本重新启动。重新启动后,它现在都可以工作了。

【问题讨论】:

  • os.getenv("PATH") 显示什么?目录中是否包含ncat? (不是:ncat 是正确的.exe,还是例如批处理脚本,在这种情况下,您可以直接调用.exe 吗?无论如何,如果您使用 ,它可能会起作用.exe 的完整路径
  • os.getenv("PATH") 显示以下内容:C:\Users\IEUser\PycharmProjects\Interpreter\Scripts;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\ProgramData\chocolatey\bin;C:\Program Files\Puppet Labs\Puppet\bin;C:\Program Files\Git\cmd;C:\Users\IEUser\AppData\Local\Microsoft\WindowsApps; Ncat 是可执行文件,没有脚本。当我查看 Windows 设置时,我看到我已将 C:\Program Files (x86)\Nmap 添加到路径(对于用户和系统)。 “ncat”是我的 Nmap 安装的一部分,在这个文件夹中。

标签: python windows cmd subprocess popen


【解决方案1】:

根据 cmets,问题在于 ncat 不在您的 PATH 中,因此您需要添加它:

import os
env = os.environ.copy()
env["PATH"] = r"C:\Program Files (x86)\Nmap;" + env["PATH"]
p = Popen(execom, env=env)
...

修改环境见this question

至于 为什么 ncat 不在你的路径中,我真的不知道;我不太使用 Micro$oft Windoze。也许有人会对那个问题给出一个规范的答案,或者你可以在超级用户上询问它,看看是否有人知道如何设置它。如果 需要它是可移植的,我会检查一堆文件夹中的 ncat 并在找不到时保释。

【讨论】:

  • 感谢您的帮助。实际上它被添加到系统变量中。我可以在我的 cmd 提示符下使用“ncat”而不会出现问题。它只需要重新启动才能为 python 发现它,我不知道为什么。在 python 中打印它的提示给了我解决方案,谢谢。 :)
  • @Duffmanta 需要重新启动以刷新环境是相当普遍的,尤其是在 Windows 上,遗憾的是。因此,旧的 Windows '技术' 建议'你试过重新启动它吗......'
  • 是的,在这样的错误上爬了 2 天左右,我感到非常难过。实际上我为 Linux 开发脚本,但它也必须适用于 Windows。 -_- 在 linux 中这根本不是问题。
猜你喜欢
  • 2013-11-13
  • 2014-06-27
  • 2017-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多