472,981 Members | 1,422 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 472,981 software developers and data experts.

writing serial port data to the gzip file

I am trying to save data it is comming from the serial port continually
for some period.
(expect reading from serial port is 100% not a problem)
Following is an example of the code I am trying to write. It works, but
it produce an empty gz file (0kB size) even I am sure I am getting data
from the serial port. It looks like g.close() does not close the gz
file.
I was reading in the doc:

Calling a GzipFile object's close() method does not close fileobj,
since you might wish to append more material after the compressed
data...

so I am completely lost now...

thanks for your comments.
Petr Jakes
==== snippet of the code ====
def dataOnSerialPort():
data=s.readLine()
if data:
return data
else:
return 0

while 1:
g=gzip.GzipFile("/root/foofile.gz","w")
while dataOnSerialPort():
g.write(data)
else: g.close()

Dec 18 '06 #1
4 2580

Petr Jakes wrote:
I am trying to save data it is comming from the serial port continually
for some period.
(expect reading from serial port is 100% not a problem)
Following is an example of the code I am trying to write. It works, but
it produce an empty gz file (0kB size) even I am sure I am getting data
from the serial port. It looks like g.close() does not close the gz
file.
I was reading in the doc:

Calling a GzipFile object's close() method does not close fileobj,
since you might wish to append more material after the compressed
data...

so I am completely lost now...

thanks for your comments.
Petr Jakes
==== snippet of the code ====
def dataOnSerialPort():
data=s.readLine()
if data:
return data
else:
return 0

while 1:
g=gzip.GzipFile("/root/foofile.gz","w")
while dataOnSerialPort():
g.write(data)
else: g.close()
Your while loop is discarding result of dataOnSerialPort, so you're
probably writing empty string to the file many times. Typically this
kind of loop are implemented using iterators. Check if your s object
(is it from external library?) already implements iterator. If it does
then

for data in s:
g.write(data)

is all you need. If it doesn't, you can use iter to create iterator for
you:

for data in iter(s.readLine, ''):
g.write(data)

-- Leo

Dec 18 '06 #2

If someone hasn't already commented,

Aside from any other problems, the file you are
trying to write to is (opened)?? in the "w" mode.
Every time a file is opened in the 'w' mode,
everything in the file is deleted.

If you open a file in the 'a' mode, then
everything in the file is left untouched and the
new data is appended to the end of the file.

Your while loop is deleting everything in the file
on each loop with the 'w' mode.

try,
vfile = open('vfile', 'a')
rather than
vfile = open('vfile', 'w')

jim-on-linux
http:\\www.inqvista.com

while 1:
g=gzip.GzipFile("/root/foofile.gz","w")
while dataOnSerialPort():
g.write(data)
else: g.close()


On Sunday 17 December 2006 20:06, Petr Jakes
wrote:
I am trying to save data it is comming from the
serial port continually for some period.
(expect reading from serial port is 100% not a
problem) Following is an example of the code I
am trying to write. It works, but it produce an
empty gz file (0kB size) even I am sure I am
getting data from the serial port. It looks
like g.close() does not close the gz file.
I was reading in the doc:

Calling a GzipFile object's close() method does
not close fileobj, since you might wish to
append more material after the compressed
data...

so I am completely lost now...

thanks for your comments.
Petr Jakes
==== snippet of the code ====
def dataOnSerialPort():
data=s.readLine()
if data:
return data
else:
return 0

while 1:
g=gzip.GzipFile("/root/foofile.gz","w")
while dataOnSerialPort():
g.write(data)
else: g.close()
Dec 18 '06 #3
Maybe I am missing something. Expect data is comming continually to the
serial port for the period say 10min. (say form the GPS), than it stops
for 1 minute and so on over and over. I would like to log such a data
to the different gzip files.
My example was written just for the simplicity (I was trying to
demonstrate the problem, it was not the real code and I was really
tired trying to solve it by myself, sorry for the bugy example)

the better way how to write such a infinite loop can be probably:
===== 8< =====
g=0
x=0
while 1:
if not g:
x+=1
g=gzip.GzipFile("/root/foofile%s.gz" % x,"w")
data=dataOnSerialPort()
while data:
myFlag=1
g.write(data)
data=dataOnSerialPort():
else:
if myFlag:
g.close()
pring g
myFlag=0

But it looks like g.close() method does not close the file (while
trying to print the g object, it still exists)

Your while loop is discarding result of dataOnSerialPort, so you're
probably writing empty string to the file many times. Typically this
kind of loop are implemented using iterators. Check if your s object
(is it from external library?) already implements iterator. If it does
then

for data in s:
g.write(data)

is all you need. If it doesn't, you can use iter to create iterator for
you:

for data in iter(s.readLine, ''):
g.write(data)

-- Leo
Dec 18 '06 #4
Hi Dennis,
thanks for your reply.
Dennis Lee Bieber napsal:
def dataOnSerialPort():
data=s.readLine()

Unless you are using a custom serial port module, that should be
s.readline()
sorry for the typo
>
if data:
return data
else:
return 0

This if statement is meaningless -- if "data" evaluates to false,
return a numeric value that evaluates to false.
I see, it is OK just to return data (or an empty string "")
>

while 1:
g=gzip.GzipFile("/root/foofile.gz","w")
while dataOnSerialPort():
g.write(data)

"data" is an uninitialized value here
else: g.close()

And what is the purpose of closing the file if you immediately turn
around and create it again (assuming gzip.GzipFile() behaves as open()
does, a mode of "w" means delete the old file and create a new one.
There is NO exit from the above.

Since I can't read your mind with regards to some of your looping...

s = ... #somewhere you had to open the serial port

g = gzip.GzipFile("/root/foofile.gz", "w")
while True:
data = s.readline()
if not data: break
g.write(data)
g.close()
what I am trying to say is g.close() does not close the g file (try to
add the line "print g" after g.close())
Petr

Dec 18 '06 #5

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

0
by: sandeepa | last post by:
Hello all I am using the serial port to receive data(7 bytes per second) from the microcontroller,receiving the data as a string and then splitting the string in two,to display 2 different...
1
by: ssc | last post by:
I'm new to C#, but have been doing embedded programming for years. I have an application that talks to an embedded radio on the serial port of my PC. I have most of the application running pretty...
15
by: xkenneth | last post by:
Hi, I'm writing a couple python applications that use the serial port (RS-232) quite extensively. Is there any way I can monitor all activity on the serial port and have it printed as the...
1
by: Narjis | last post by:
Hi everybody? hope y'r all fine I need a small help.. can anyone give me a c++ program that reads the serial port data? (i.e. that data are burned in a microcontroller chip and i want to connect...
2
by: Nasif | last post by:
Currently I am writing a program which sends and receives messages through serial port to a device. I am using C# and Microsoft Visual studio 2005 for windows program. But my problem is when i try...
2
by: crampio | last post by:
Hello everyone, I generally look at Google and other websites before I post a question, but trust me I still cannot find and answer to this problem. I'm using VB.net. My problem being is that I...
3
by: Ajinkya | last post by:
How can I poll for serial port data using javascript ?
6
by: cnixuser | last post by:
Hello, I have a basic application written which is designed to data over a serial cable and then receive a response back. I am not getting any triggers to my data received event. I have tried...
6
by: james457 | last post by:
Hi all, I am sending data from a linux application through serial port to an embedded device. In the current implementation a byte circular buffer is used in the firmware. (Nothing but an array...
0
by: lllomh | last post by:
Define the method first this.state = { buttonBackgroundColor: 'green', isBlinking: false, // A new status is added to identify whether the button is blinking or not } autoStart=()=>{
2
by: DJRhino | last post by:
Was curious if anyone else was having this same issue or not.... I was just Up/Down graded to windows 11 and now my access combo boxes are not acting right. With win 10 I could start typing...
2
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 4 Oct 2023 starting at 18:00 UK time (6PM UTC+1) and finishing at about 19:15 (7.15PM) The start time is equivalent to 19:00 (7PM) in Central...
0
by: Aliciasmith | last post by:
In an age dominated by smartphones, having a mobile app for your business is no longer an option; it's a necessity. Whether you're a startup or an established enterprise, finding the right mobile app...
0
tracyyun
by: tracyyun | last post by:
Hello everyone, I have a question and would like some advice on network connectivity. I have one computer connected to my router via WiFi, but I have two other computers that I want to be able to...
3
NeoPa
by: NeoPa | last post by:
Introduction For this article I'll be using a very simple database which has Form (clsForm) & Report (clsReport) classes that simply handle making the calling Form invisible until the Form, or all...
0
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 1 Nov 2023 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM) Please note that the UK and Europe revert to winter time on...
0
NeoPa
by: NeoPa | last post by:
Introduction For this article I'll be focusing on the Report (clsReport) class. This simply handles making the calling Form invisible until all of the Reports opened by it have been closed, when it...
4
by: GKJR | last post by:
Does anyone have a recommendation to build a standalone application to replace an Access database? I have my bookkeeping software I developed in Access that I would like to make available to other...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.