2013-06-10 5 views
6

Если я бегу ниже команды, то питон возвращается отличный результат ..выполнить команду кота в подпроцесс, POPEN() питона

result_aftermatch= subp.Popen('ls -lrt', stdout=subp.PIPE,stderr=subp.PIPE,shell=True)

, но так же, как у меня есть требование greping строки из файла с кодом, как показано ниже ...

list_of_id=[23,34,56,77,88] 
result_aftermatch= subp.Popen('egrep','list_of_IDs','/home/bimlesh/python/result.log', stdout=subp.PIPE,stderr=subp.PIPE,shell=True) 
result_lines,result_err= result_aftermatch.communicate() 
print result_lines 

Приведенный выше код дает ошибку, как показано ниже ...

Traceback (most recent call last): 
    File "test.py", line 144, in <module> 
    result_aftermatch= subp.Popen('egrep','list_of_IDs','/home/bimlesh/python/result.log', stdout=subp.PIPE,stderr=subp.PIPE,shell=True) 
    File "/usr/lib/python2.6/subprocess.py", line 573, in __init__ 
    raise TypeError("bufsize must be an integer") 
TypeError: bufsize must be an integer 

Пожалуйста, помогите.

ответ

3

Проблема в том, что вы передаете команду в виде нескольких аргументов. Вам нужно передать их в виде списка или кортежа.

Как:

subp.Popen([ 'egrep','list_of_IDs','/home/bimlesh/python/result.log' ], stdout=subp.PIPE,stderr=subp.PIPE,shell=True) 
+0

я попытался ниже код ... –

0

Я предполагаю, что вы не ищете это:

list_of_id = [23,34,56,77,88] 
ids_regex = '|'.join([str(i) for i in list_of_id]) 
result_aftermatch = subp.Popen(['egrep', ids_regex, '/home/bimlesh/python/result.log'], stdout=subp.PIPE, stderr=subp.PIPE) 
result_lines, result_err = result_aftermatch.communicate() 
print result_lines 
+0

Я попытался выше, но не получая ничего в печати (нет линий , нет ошибки). Пробовал с Shell = True и получить ошибку «Использование: egrep [OPTION] ... PATTERN [FILE] ... Попробуйте' egrep --help 'для получения дополнительной информации. " –

+0

Дорогие зрители и блоггеры, я все равно не получил правильного ответа. PLS помощи. –

Смежные вопросы