【发布时间】:2017-11-26 04:27:35
【问题描述】:
我正在用 python 编写代码,我需要通过软件名称获取互联网流量。我需要使用 cmd 命令netstat -nb,该命令需要提升。我必须保持简单,一行左右,不要长批处理或 powershell 脚本。如果我只使用 subprocess python 库,那就更好了。
我有两行代码可以满足我的需要:
subprocess.check_output('powershell Start-Process netstat -ArgumentList "-nb" -Verb "runAs"', stdout=subprocess.PIPE, shell=True)
这个问题是它打开了一个新窗口,我需要的所有数据都丢失了。也许有办法不打开另一个窗口或保存新窗口的输出?
subprocess.check_output('powershell Invoke-Command {cmd.exe -ArgumentList "/c netstat -nb"}', stdout=subprocess.PIPE, shell=True)
这个我在同一个窗口中有输出,但我没有海拔,所以我没有得到任何结果......也许有一种方法可以在不打开新窗口的情况下获得海拔?
感谢您的帮助,希望我的问题足够清楚。
【问题讨论】:
-
当您可以直接调用这些命令时,为什么还要使用 powershell?
-
为什么不让 Python 提升自己而不是让 PowerShell 为您做这件事呢?查看 this 对另一个 SO 问题的回答了解详情。
-
你看过
RUNAS命令吗? -
感谢您的所有回答。使用
ExecuteShellW或任何其他函数,我无法保存 cmd 命令的输出,这就是我需要使用子进程的原因。为了使用runas,我需要插入用户,然后输入密码,这些信息我不会得到,即使我在我的电脑上使用它也不起作用。我需要的是静默运行(如果可能的话)netstat -nb命令并将输出保存到我的 python 脚本中的一个变量中。抱歉,如果一开始还不够清楚。 -
您是否以管理员身份运行您的 python 脚本?
标签: python powershell cmd