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.

Recommended Answers

All 2 Replies

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.

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

child = Popen(...)
for line in child.stdout:
  print line
Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.