2017-06-22 17 views
5

私はソフトウェアの名前でインターネットトラフィックを取得する必要があるPythonでコードを書いています。仰角が必要なコマンドnetstat -nbを使用する必要があります。私はそれを単純なもの、1行ほどのもの、長いバッチやPowerShellスクリプトなしで保つ必要があります。サブプロセスpythonライブラリのみを使用するのが望ましいです。PowershellとPython - 管理者としてコマンドを実行する方法

私は途中で私は必要なものの仕事の2行のコードを持っている:

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) 

私は同じウィンドウに出力を持っていますが、私はどんな結果を得ることはありませんので、私は標高を持っていないこの1つは...たぶん、新しいウィンドウを開いたり、そうせずに高度を得るための方法があります?

ご協力いただきありがとうございます。私の質問が十分に明確であることを願っております。

+0

これらのコマンドを直接呼び出すことができるときに、なぜpowershellを使用していますか? – TheIncorrigible1

+2

PowerShellを使っているのではなく、Python自体を昇格させてみませんか?詳細については、[これ](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) 

それはおそらく、もう少しだろう弾丸抵抗を使用して、TEMP環境変数を取得し、完全修飾の一時ファイルの場所に使用します。

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

そして、あなたのPythonスクリプトで同じことをしてください。

一時ファイルを作成したら、それをPythonで処理できるはずです。

複数のワーカープロセスで耐久性が必要な場合は、プロセスごとに一意の一時ファイルを持つようにコードを追加します。

関連する問題