[Tutor] Add newline's, wrap, a long string
Martin Walsh
mwalsh at mwalsh.org
Wed Apr 29 06:22:20 CEST 2009
David wrote:
> vince spicer wrote:
>> first, grabbing output from an external command try:
>>
>> import commands
>>
>> USE = commands.getoutput('grep USE /tmp/comprookie2000/emege_info.txt
>> |head -n1|cut -d\\"-f2')
>>
>> then you can wrap strings,
>>
>> import textwrap
>>
>> Lines = textwrap.wrap(USE, 80) # return a list
>>
>> so in short:
>>
>> import commands, textwrap
>> data = textwrap.wrap(commands.getoutput('my command'), 80)
>>
>>
>>
>> Vince
> Thanks Vince,
> I could not get command to work, but I did not try very hard;
> ["cut: the delimiter must be a single character Try `cut --help' for
> more", 'information. head: write error: Broken pipe']
Ah, I see. This error is most likely due to the typo (missing space
before -f2).
>
> But textwrap did the trick, here is what I came up with;
>
> #!/usr/bin/python
>
> import subprocess
> import os
> import textwrap
> import string
>
> def subopen():
> u_e = subprocess.Popen(
> 'grep USE /tmp/comprookie2000/emerge_info.txt |head -n1|cut
> -d\\" -f2',
> shell=True, stdout=subprocess.PIPE,)
> os.waitpid(u_e.pid, 0)
> USE = u_e.stdout.read().strip()
> L = textwrap.wrap(USE, 80) # return a list
> Lines = string.join(L, '\n')
Just one more comment, string.join is deprecated, yet join is a method
of str objects. So ...
Lines = '\n'.join(L)
... or use textwrap.fill which returns a string with the newlines
already in place ...
Lines = textwrap.fill(USE, 80)
HTH,
Marty
> fname = 'usetest.txt'
> fobj = open(fname, 'w')
> fobj.write(Lines)
> fobj.close
>
> subopen()
>
> Here is the output;
> http://linuxcrazy.pastebin.com/m66105e3
>
More information about the Tutor
mailing list