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