subprocess : AttributeError: 'Popen' object has no attribute 'read'
David Raymond
David.Raymond at tomtom.com
Thu Jan 3 15:34:34 EST 2019
Agreeing with the other poster that it's probably not the best way to handle it.
But for the sake of helping with subprocess:
https://docs.python.org/3.7/library/subprocess.html#popen-objects
Popen Objects don't have read() as the error says. That's on their .stdout and .stderr streams. So you'd want g_info.stdout.read() Or .stderr maybe, depending on what you're running and how it does its output. If you want them both to go to the same thing you can use stderr = subprocess.STDOUT instead of subprocess.PIPE, then both will end up in your .stdout stream.
And while it is indeed gonna be a quick thing that you're running, you have nothing in there that makes sure your subprocess actually runs and finishes before you're trying to read the results, which will bite you on anything more complicated.
-----Original Message-----
From: Python-list [mailto:python-list-bounces+david.raymond=tomtom.com at python.org] On Behalf Of Mohan Mohta
Sent: Thursday, January 03, 2019 2:44 PM
To: python-list at python.org
Subject: subprocess : AttributeError: 'Popen' object has no attribute 'read'
Hello,
I am trying to grep the keyword (which I got from report_file ) from report_file
I tried multiple ways but am unable to get it to work.
Below are the methods I tried.
<Original Code>
fp=open(txt_file,'r')
for line in fp :
line=line.strip()
var1=line.lower()
g_info=subprocess.Popen('cat report_file| grep -i '+var1, stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
g_info=g_info.read()
g_info=g_info.strip()
info=g_info.strip('||')
print g_info
print info
fp.close()
Error:
AttributeError: 'Popen' object has no attribute 'read'
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
<Modified Code -1 >
fp=open(txt_file,'r')
for line in fp :
line=line.strip()
var1=line.lower()
cmd='cat report_file| grep -i '+var1
g_info=subprocess.Popen(cmd, stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
g_info=g_info.read()
g_info=g_info.strip()
info=g_info.strip('||')
print g_info
print info
fp.close()
Error:
AttributeError: 'Popen' object has no attribute 'read'
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
<Modified Code -2 >
fp=open(txt_file,'r')
for line in fp :
line=line.strip()
var1=line.lower()
cmd='cat report_file| grep -i '+var1
g_info=os.command(cmd)
g_info=g_info.read()
g_info=g_info.strip()
info=g_info.strip('||')
print g_info
print info
fp.close()
Result :
The Code executes but the output is in screen and does not get stored in a variable.
I am interested if I can achieve the same result with subprocess calls
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
<Modified Code -3 >
fp=open(txt_file,'r')
for line in fp :
line=line.strip()
var1=line.lower()
cmd='cat report_file| grep -i '+var1
g_info=subprocess.Popen(cmd, stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True).
g_info=g_info.stdout.read()
g_info=g_info.strip()
info=g_info.strip('||')
print g_info
print info
fp.close()
Error
AttributeError: 'Popen' object has no attribute 'read'
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
<Modified Code -3 >
fp=open(txt_file,'r')
for line in fp :
line=line.strip()
var1=line.lower()
cmd=['cat','report_file','|','grep','-i',serv_name]
g_info=subprocess.Popen(cmd)
g_info.wait()
try :
g_info=g_info.stdout.readlines()
print g_info
except AttributeError :
pass
g_info=g_info.strip()
info=g_info.strip('||')
print g_info
print info
fp.close()
Result :
Nothing gets printed out
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
--
https://mail.python.org/mailman/listinfo/python-list
More information about the Python-list
mailing list