【问题标题】:Powershell and Python - How to run a command as adminPowershell 和 Python - 如何以管理员身份运行命令
【发布时间】: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


【解决方案1】:

创建一个批处理文件来执行任务,并将捕获的输出捕获到一个临时文件中:

[donetstat.bat]
netstat -nb > ".\donetstat.tmp"

然后在你的程序中执行那个

[yourprogram.py]
subprocess.check_output('powershell Start-Process cmd -ArgumentList "/c ".\donetstat.tmp" -Verb "runAs"', stdout=subprocess.PIPE, shell=True)

获取TEMP 环境变量并将其用于完全限定的临时文件位置可能会更防弹:

netstat -nb > "%TEMP%.\donetstat.tmp"

然后在你的 Python 脚本中做同样的事情。

创建临时文件后,您应该能够在 Python 中处理它。

如果这需要对多个工作进程保持持久性,请添加一些代码以确保每个进程都有一个唯一的临时文件。

【讨论】:

    猜你喜欢
    • 2011-12-03
    • 2021-12-29
    • 1970-01-01
    • 2016-02-04
    • 2016-01-25
    • 1970-01-01
    • 2020-06-23
    • 2011-08-22
    相关资源
    最近更新 更多