質問

ですから、私はこのアプリケーションがかなり複雑です...それを短くするためにこれがあなたが知っておくべき主なことです:

file_name = raw_input("Name your file:").lower()

os.popen(sudo tcpdump -c5 -vvv -w "file_name" host wiki or host wiki2)

しかし、これはうまくいかないようです。修正を取得できますか?ありがとう、パステルヌス

edit1:わかりました、これは私が今持っているものですが、それは機能していません、修正方法に関するポインターはありますか?

import subprocess, os, sys

filename = raw_input('File name:').lower

pipe = os.popen("sudo tcpdump -c5 -w", 'filename')

pipe = popen("sudo tcpdump -c5 -w", shell=True, stdout=PIPE).stdout

役に立ちましたか?

解決

「os.popen」を使用しないでください、あなたは サブプロセス モジュール。

私はこれ(文字列)を仮定しています:

sudo tcpdump -c5 -vvv -w "file_name" host wiki or host wiki2

あなたのコマンドです。

tcpdumpを呼び出して出力を取得しないだけなので、使用します subprocess.call

>>> subprocess.call(your_command.split())

もちろん、それが機能していない理由は、エラーが何であるかに依存しますが、これはあなたがそれに取り組むべき方法です。エラーで回答を更新できれば、明確にすることができます。

他のヒント

あなたの問題は、あなたがあなたのコマンドとして文字列を渡さないことです。修正した呼び出し popen():

os.popen('sudo tcpdump -c5 -vvv -w {0} host wiki or host wiki2'.format(file_name))

Pythonの新しいバージョンを実行している場合は、サブプロセスモジュールを使用してください。

os.popenの交換の詳細を参照してください。

unixでは、os.popen2、os.popen3、およびos.popen4についても、実行するコマンドとしてシーケンスを受け入れます。

pipe = os.popen("cmd", 'r', bufsize)
==>
pipe = Popen("cmd", shell=True, bufsize=bufsize, stdout=PIPE).stdout
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top