2017-06-22 119 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中處理它。

如果需要對多個工作進程持久化,請添加一些代碼以確保每個進程都有一個唯一的臨時文件。

相關問題