我在python中编写代码,我需要通过软件名称获取互联网流量。我需要使用cmd命令netstat -nb
,该命令需要提升。我必须保持简单,一行左右,没有长批量或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 :(得分: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脚本中执行相同的操作。
一旦你创建了tempfile,你应该能够用Python处理它。
如果这需要对多个工作进程持久,请添加一些代码以确保每个进程都有唯一的临时文件。