2013-06-10 24 views
6

Nếu tôi đang chạy bên dưới lệnh sau đó trăn đang trở lại kết quả tuyệt vời ..thực hiện lệnh mèo trong tiến trình con, Popen() của python

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

nhưng trong cùng một cách tôi có yêu cầu của dòng greping từ tập tin với mã là như sau ...

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 

Trên code đang đưa ra lỗi như sau ...

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 

Xin vui lòng giúp đỡ.

Trả lời

3

Vấn đề là bạn đang chuyển lệnh dưới dạng nhiều arg. Bạn cần phải vượt qua chúng như một danh sách hoặc một tuple.

Giống như:

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

tôi đã cố gắng bên dưới mã ... –

0

Tôi đoán bạn đang tìm kiếm này:

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

tôi đã cố gắng ở trên nhưng không nhận được bất cứ điều gì trong in ấn (không đường , không có lỗi). Đã thử với Shell = True quá và nhận được lỗi "Cách sử dụng: egrep [TÙY CHỌN] ... PATTERN [FILE] ... Hãy thử' egrep --help 'để biết thêm thông tin. " –

+0

Kính gửi người xem và người viết blog, tôi vẫn chưa nhận được câu trả lời đúng. xin giúp đỡ. –

Các vấn đề liên quan