subprocess call acts differently than command line call?



Hello,

I need a program that will traverse a directory tree to ensure that
there
are unix-style line endings on every file in that tree that is a text
file.
To tell text files from others I want to use the unix "file" command
(Python's "mimetypes" is not so good for me). But I am stuck on
something about getting that output, and I'd greatly appreciate any
pointers.

Both the command line "file" and the python libmagic binding give the
same behavior, but I'll illustrate with "file". It sometimes acts
differently when run from the command line than when run using
the subprocess module (with the same user). For example, it
sometimes
gives output when run from the command line but no output when run as
a subprocess.

Below is a short program to demo. (I use this on a test file tree
that is at ftp://joshua.smcvt.edu/pub/hefferon/a.zip if anyone
is interested.)

.............................................
import subprocess
import glob

for fn in glob.glob('a*/*'):
cmd=['/usr/bin/file',fn]
cmdStr=" ".join(cmd)
try:

p=subprocess.Popen(cmdStr,shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE,close_fds=True)
(child_stdin,
child_stdout,
child_stderr)=(p.stdin,p.stdout,p.stderr)
stdoutContent=child_stdout.read()
except Exception, err:
mesg=u"unable to execute %s" % (repr(cmdStr),)
raise StandardError, mesg+": "+str(err)
if (p.returncode):
mesg=u"trouble executing %s" % (repr(cmdStr),)
raise StandardError, mesg+": "+repr(p.returncode)
print "result: ",stdoutContent
print "done"
.............................................

I've put a transcript of what happens at the bottom of this message.
One file (in the test tree it is "eqchange.txt") gives no output from
the above program, but does give an output when I use "file" at the
command line.

Specifying "-m/usr/share/file/magic" in the "file" call doesn't
change
that the command line and subprocess calls act differently, so it is
not just a question of different environments causing the system to
use different "magic" files. Changing the PIPE's to files, then
closing
and reopening them also does not matter, I believe.

In short I expected subprocess to just mimic my typing it in. Is
there some reason "file" doesn't act this way, and is there some
way to make it do so?

I have Python 2.4.4 running on Ubuntu. Thank you for any suggestions,
Jim

-----transcript (edited to shorten)------------
$ python test.py
result: acrotex/readme.txt: ASCII English text, with CRLF line
terminators

result: acrotex/eq2db.ins: ASCII English text, with CRLF line
terminators

result: acrotex/eqchange.txt:

result: acrotex/exerquiz.dtx: ISO-8859 English text, with CRLF line
terminators
result: acrotex/doc: directory

done

$ file acrotex/eqchange.txt
acrotex/eqchange.txt: ISO-8859 English text, with CRLF line
terminators
$ file acrotex/eqchange.txt 1> test.out
$ cat test.out
acrotex/eqchange.txt: ISO-8859 English text, with CRLF line
terminators
$ file acrotex/eqchange.txt 2> test.out
acrotex/eqchange.txt: ISO-8859 English text, with CRLF line
terminators
$ cat test.out
$

.



Relevant Pages

  • Re: subprocess call acts differently than command line call?
    ... are unix-style line endings on every file in that tree that is a text ... result: acrotex/readme.txt: ASCII English text, with CRLF line ...
    (comp.lang.python)
  • Re: Command not found: wih every endeavour
    ... It so happens that "command not found" may also imply "return ... characters not valid" ... I had CRLF line terminators instead of simple LF ones. ...
    (alt.os.linux)
  • Re: Backup/Copy tree with alias file
    ... So what does this SEARCH command give us? ... sys$specific 'root ... above and then add the alias to give it something to look for. ... one shouldn't manually delete a system directory tree ...
    (comp.os.vms)
  • Re: Substitute characters command
    ... Anybody who use any word processor to edit a text file needs to be aware ... Thanks to this forum I've learned how to get a directory tree by ... using the command ... Then I got strange characters so I used ASCII instead ...
    (microsoft.public.windowsxp.basics)
  • i cant delete a directory !!! someone help me please !
    ... you cannot delete such a tree with one command (DOS ... cycle thru the loop. ... backspace 2, enter -- loop by hand will do the job. ...
    (microsoft.public.windowsxp.perform_maintain)