2017-06-22 120 views
5

我正在用Python编写代码,其中我需要通过软件名称获取Internet通信。需要我使用cmd命令netstat -nb,该命令需要提升。我必须保持简单,只需一行左右,不需要很长的批处理或PowerShell脚本。如果我只使用子进程python库,则更好。Powershell和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) 

这一次我在同一个窗口中输出,但我没有抬高,所以我没有得到任何结果...也许有越来越海拔不打开一个新窗口或左右的方式?

谢谢你的帮助,希望我的问题很清楚。

+0

为什么你可以直接调用这些命令时使用powershell? – TheIncorrigible1

+2

为什么不让Python自己提升而不是让PowerShell为你做?查看[this](https://stackoverflow.com/a/41930586/3245749)回答另一个SO问题的详细信息。 – TheMadTechnician

+0

你有没有看过'RUNAS'命令? – lit

回答

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) 

它可能会多一点bullet-resistent以获取TEMP环境变量并将其用于完全合格的临时文件位置:

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

然后在Python脚本中执行相同的操作。

一旦你创建了临时文件,你应该可以在Python中处理它。

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

相关问题