os.popen()变量

时间:2010-11-30 18:49:26

标签: python popen os.system

所以我的应用程序相当复杂...... 为了简短起见,这是你应该知道的主要内容:

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

3 个答案:

答案 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