6

如果我在命令下运行,那么 python 将返回很好的结果..

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

但以同样的方式,我需要使用代码从文件中提取行,如下所示......

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

请帮忙。

4

2 回答 2

3

问题是您将命令作为多个参数传递。您需要将它们作为列表或元组传递。

喜欢:

subp.Popen([ 'egrep','list_of_IDs','/home/bimlesh/python/result.log' ], stdout=subp.PIPE,stderr=subp.PIPE,shell=True)
于 2013-06-10T19:11:16.693 回答
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
于 2013-06-11T19:34:11.153 回答