0

サブプロセスを使用して、標準出力を変数に送信するLinuxバイナリを取得しようとしています。しかし、トレースバックを取得し続けてください。

>>> import subprocess
>>>nmap -sn -Pn todd.ns.cloudflare.com --script dns-check-zone --script-args='dns-check-zone.domain=www.macmonster.com

任意のアイデア (ああ、私は Python2.7 を使用しています)。

理想的には、セキュリティ上の懸念を避けるために、Shell=true の使用を避けたいと考えています。

ありがとう、

4

3 に答える 3

5

救助にシュレックス!

モジュール shlex は、シェル コマンド全体を含む文字列を取得し、Popen と check_output が期待するとおりに分割します。このような:

import shlex, subprocess
cmd = "/usr/bin/nmap -sn -Pn todd.ns.cloudflare.com --script dns-check-zone --script-args='dns-check-zone.domain=www.macmonster.com'"
args = shlex.split(cmd)
output = subprocess.check_output(args)

args の内容を見ると、次のように表示されます。

>>> print args
['/usr/bin/nmap', '-sn', '-Pn', 'todd.ns.cloudflare.com', '--script', 'dns-check-zone', '--script-args=dns-check-zone.domain=www.macmonster.com']

shlex はオプション「--script dns-check-zone」を 2 つのトークンに分割することに注意してください。一方、「--script-args='dns-check-zone.domain=www.macmonster.com'」は保持されましたが、一重引用符は削除されました。

于 2013-05-17T19:45:12.663 に答える
1
import subprocess
output = subprocess.check_output(["/usr/bin/nmap", "-sP", "-n", "172.16.1.0/24"])

output = subprocess.check_output(["/usr/bin/nmap", "-sP", "-n", "172.16.1.0/24"], stderr=subprocess.STDOUT)
于 2013-04-24T21:10:54.950 に答える
0

これを試しましたか:

p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
var = p.stdout.read()
print var

を使用していたでしょうがcommunicate、奇妙なリスト型のものを返します。

于 2013-05-16T15:04:43.797 に答える