Win XP: Problem with shell scripting in Python

Steve Holden steve at holdenweb.com
Fri Jun 9 08:36:09 EDT 2006


A.M wrote:
> "Fredrik Lundh" <fredrik at pythonware.com> wrote in message 
> news:mailman.6785.1149837599.27775.python-list at python.org...
> 
>>A.M wrote:
>>
>>
>>in python, "MD" is spelled os.mkdir.
>>
>>
>>>Am I missing anything?
>>
>>the difference between STDOUT and STDERR, and the difference between 
>>buffered output and non-buffered output, and perhaps a few other things 
>>related to how STDIO behaves on modern computers...  however, if you want 
>>to pretend that STDOUT and STDERR are the same thing, you can use 
>>os.popen4:
>>
>>
>>>>>o, i = os.popen4("md :")
>>>>>i.read()
>>
>>'The filename, directory name, or volume label syntax is incorrect.\n'
>>
>>or the subprocess module.
>>
>>
>>>Considering the fact that Ruby doesn't have any problem with redirecting
>>>STDOUT into files or string variables, is Python the right tool for
>>>this kinds of shell scripting?
>>
>>rewriting BAT files as a series of os.system or os.popen calls isn't 
>>exactly optimal (neither for the computer nor the programmer nor the 
>>future user); better take an hour to skim the "generic operating system 
>>services" section in the library reference, and use built-in functions 
>>wherever you can:
>>
>>    http://docs.python.org/lib/allos.html
>>
>>the following modules are especially useful:
>>
>>    http://docs.python.org/lib/module-os.html
>>    http://docs.python.org/lib/module-os.path.html
>>    http://docs.python.org/lib/module-glob.html
>>    http://docs.python.org/lib/module-shutil.html
>>
>>by using the built-in tools, you get better performance in many cases, 
>>better error handling, and code that's a lot easier to reuse (also on 
>>non-Windows platforms).
>>
>></F>
>>
> 
> 
> Thanks Fredrik for help.
> 
> 
> 
> The "MD :" is just a sample. The actual script contains different commands.
> 
> 
> 
> The actual script that I am "translating" consolidates huge table data from 
> multiple SQL Server database into Oracle. I have to use BCP command line at 
> the SQL server side and SQL*Loader at the Oracle side.
> 
> 
> 
> I must capture the stdout/stderr output of command lines into log files for 
> future inspection/troubleshooting. Beside the issue with stdout/stderror, 
> the main stressful problem that I have is the fact that Python captures 
> command line's output somehow differently. For example, popen captures BCP's 
> command output completely wrong. Some part of summary is at the top and the 
> progress percentages are at the bottom and more.! This is just stdout 
> output.
> 
> 
> 
> I am going to investigate other popen4 and other popen forms per your 
> suggestion and try to fix the stdout sequence problem.
> 
I dare hardly suggest this, but might it not be better to use Python's 
database functionality to perform the task? The language can access both 
databases, and you might find it quicker. Then again, if your database 
experience is limited, you may not ...

regards
  Steve
-- 
Steve Holden       +44 150 684 7255  +1 800 494 3119
Holden Web LLC/Ltd          http://www.holdenweb.com
Love me, love my blog  http://holdenweb.blogspot.com
Recent Ramblings     http://del.icio.us/steve.holden




More information about the Python-list mailing list