New to Python, help printing output of system calls

Reply

Join Date: Aug 2008
Posts: 1
Reputation: slendergreen is an unknown quantity at this point 
Solved Threads: 0
slendergreen slendergreen is offline Offline
Newbie Poster

New to Python, help printing output of system calls

 
0
  #1
Aug 18th, 2008
I'm new to Python and not anywhere near a competent programmer.

Anyway, if someone could help me get over this hump, I'd appreciate it.

I need to write a Python script that calls commands from the OS that may have lengthy output. Let's say I want to see the results of an rsync between two directories. I'd like to print the output in real-time to a web page.

My web page calls the Python script. No problem.
My Python script does a system call to rsync. No problem.

Here's were I get puzzled. No output from the rsynch makes it to the screen. It runs, but I can't see that anything is happening until the rsync is finished.

What would be the correct technique for doing this kind of thing? Basically I want to call system functions and have their status output appear just as I would have seen it from the command line.

Thanks for any tips.
Reply With Quote Quick reply to this message  
Join Date: Jun 2008
Posts: 122
Reputation: slate is an unknown quantity at this point 
Solved Threads: 30
slate slate is offline Offline
Junior Poster

Re: New to Python, help printing output of system calls

 
0
  #2
Aug 18th, 2008
Try subprocess.Popen stdout redirection to a file or to the web server input.

However I would not expose a long running server process via web. I think it would be better to schedule the process and present the output.
Reply With Quote Quick reply to this message  
Join Date: Jul 2008
Posts: 887
Reputation: Gribouillis has a spectacular aura about Gribouillis has a spectacular aura about Gribouillis has a spectacular aura about 
Solved Threads: 209
Gribouillis's Avatar
Gribouillis Gribouillis is offline Offline
Practically a Posting Shark

Re: New to Python, help printing output of system calls

 
0
  #3
Aug 18th, 2008
It would be easier if we could see the python line which runs the system call.
A possible solution to your problem is to start the system call without waiting for it's completion, using subprocess.Popen (see http://docs.python.org/lib/node533.html). Then, once you have a child process running, print it's output with a loop, like this
  1. child = Popen(...)
  2. for line in child.stdout:
  3. print line
Reply With Quote Quick reply to this message  
Reply

This thread is more than three months old.
Perhaps start a new thread instead?
Message:



Other Threads in the Python Forum
Thread Tools Search this Thread



About Us | Contact Us | Advertise | DaniWeb | Acceptable Use Policy | RSS Feed

©2003 - 2009 DaniWeb® LLC