Python subprocess.Popen() 找不到可执行文件
Python subprocess.Popen() does not find executable
我正在编写一个脚本,该脚本应该 运行 新子进程中的命令。目前我为此使用 python subprocess.Popen() 。我的问题是我可以 运行 命令,如“dir”,但不能安装程序。当我打开 cmd 提示符并输入“program -h”时,我得到了正常的帮助输出。当我尝试使用 Popen() 打开它时,出现无法找到该程序的错误。这就像他没有找到可执行文件,即使我手动查找时 cmd promt 可以找到它。对于测试,我使用 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 脚本重新启动。重新启动后,它现在可以工作了。
根据评论,问题只是 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。也许有人会对 that 问题给出规范的答案,或者您可以通过超级用户询问它,看看是否有人知道如何设置它。如果 我 需要它是可移植的,我会检查一堆文件夹中的 ncat 并在找不到时保释。
我正在编写一个脚本,该脚本应该 运行 新子进程中的命令。目前我为此使用 python subprocess.Popen() 。我的问题是我可以 运行 命令,如“dir”,但不能安装程序。当我打开 cmd 提示符并输入“program -h”时,我得到了正常的帮助输出。当我尝试使用 Popen() 打开它时,出现无法找到该程序的错误。这就像他没有找到可执行文件,即使我手动查找时 cmd promt 可以找到它。对于测试,我使用 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 脚本重新启动。重新启动后,它现在可以工作了。
根据评论,问题只是 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。也许有人会对 that 问题给出规范的答案,或者您可以通过超级用户询问它,看看是否有人知道如何设置它。如果 我 需要它是可移植的,我会检查一堆文件夹中的 ncat 并在找不到时保释。