所以我的应用程序相当复杂...... 为了简短起见,这是你应该知道的主要内容:
file_name = raw_input("Name your file:").lower()
os.popen(sudo tcpdump -c5 -vvv -w "file_name" host wiki or host wiki2)
但这似乎不起作用。我可以修理一下吗? 谢谢, Pastelinux
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
答案 0 :(得分:2)
不要使用`os.popen',你应该使用subprocess模块。
我假设这个(字符串):
sudo tcpdump -c5 -vvv -w "file_name" host wiki or host wiki2
是你的命令。
由于我们只需要调用tcpdump而不从中获取任何输出,我们使用subprocess.call
>>> subprocess.call(your_command.split())
当然为什么它不起作用取决于错误是什么,但这就是你应该如何去做。如果您可以使用错误更新答案,那么可以清楚。
答案 1 :(得分:2)
您的问题是您没有传递字符串作为您的命令。修复了对popen()
的调用:
os.popen('sudo tcpdump -c5 -vvv -w {0} host wiki or host wiki2'.format(file_name))
答案 2 :(得分:0)
如果您运行的是较新版本的Python,请使用子进程模块。
请参阅os.popen的替换详情:
它说:在Unix上,os.popen2,os.popen3和os.popen4也接受一个序列作为执行命令,在这种情况下,参数将直接传递给程序而不需要shell干预。
pipe = os.popen("cmd", 'r', bufsize)
==>
pipe = Popen("cmd", shell=True, bufsize=bufsize, stdout=PIPE).stdout