2013-07-26 3 views
2

Я пытаюсь выполнить следующую команду системы с помощью Python:Противоречивые стандартный вывод на Python subprocess.Popen

cat txt_file | egrep "keyword1|keyword2|keyword3" 

используя ниже питон кода:

p1 = subprocess.Popen (['cat', txt_file], stdout=subprocess.PIPE) 
p2 = subprocess.Popen (['egrep', "\"" + keyword_list + "\""], stdin=p1.stdout, stdout=subprocess.PIPE) 

#where keyword_list is : "keyword1|keyword2|keyword3" 

p1.stdout.close() #for p2 to exit if SIGPIPE from p1 
out = p2.communicate()[0] 

Там находятся несколько строк для вывода задать расширенные, Но используя вышеприведенный скрипт, я могу получить только строку, соответствующую среднему ключевому слову2 в переменной out.

В чем может быть проблема?

Обновление: Платформа: Windows txt_file довольно большой ~ 8 MB

ответ

0

Я полагаю, что это "\"" материал (который будет выглядеть лучше, как '"', BTW).

Вы звоните Popen()безshell=True, так что вы должны дать параметры, как вы хотите их. В обычном egrep звоните "", удаленные оболочкой, шаг, который у вас здесь нет. Так что они вам здесь не нужны.

0

Устранена следующим обходного:

#Using file as stdin for p2 
txt_file = open ('txt_file_path') 
p2 = subprocess.Popen (['egrep', keyword_list, stdin=txt_file) 
out = p2.communicate()[0] 
txt_file.close() 
Смежные вопросы