piping with subprocess

2014-02-01 Thread Rick Dooling
I spent half a day trying to convert this bash script (on Mac)

textutil -convert html $1 -stdout | pandoc -f html -t markdown -o $2

into Python using subprocess pipes.

It works if I save the above into a shell script called convert.sh and then do

subprocess.check_call([convert.sh, file, markdown_file]) 

where file and markdown_file are variables.

But otherwise my piping attempts fail.

Could someone show me how to pipe in subprocess. Yes, I've read the doc, 
especially

http://docs.python.org/2/library/subprocess.html#replacing-shell-pipeline

But I'm a feeble hobbyist, not a computer scientist.

Thanks

RD
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: piping with subprocess

2014-02-01 Thread Peter Otten
Rick Dooling wrote:

 I spent half a day trying to convert this bash script (on Mac)
 
 textutil -convert html $1 -stdout | pandoc -f html -t markdown -o $2
 
 into Python using subprocess pipes.
 
 It works if I save the above into a shell script called convert.sh and
 then do
 
 subprocess.check_call([convert.sh, file, markdown_file])
 
 where file and markdown_file are variables.
 
 But otherwise my piping attempts fail.

It is always a good idea to post your best effort failed attempt, if only 
to give us an idea of your level of expertise.

 Could someone show me how to pipe in subprocess. Yes, I've read the doc,
 especially
 
 http://docs.python.org/2/library/subprocess.html#replacing-shell-pipeline
 
 But I'm a feeble hobbyist, not a computer scientist.

Try to convert the example from the above page


output=`dmesg | grep hda`
# becomes
p1 = Popen([dmesg], stdout=PIPE)
p2 = Popen([grep, hda], stdin=p1.stdout, stdout=PIPE)
p1.stdout.close()  # Allow p1 to receive a SIGPIPE if p2 exits.
output = p2.communicate()[0]


to your usecase. Namely, replace

[dmesg] -- [textutil, -convert, html, infile, -stdout]
[grep, hda] -- [pandoc, -f, html, -t, marktown, -o,
 outfile]

Don't forget to set

infile = ... 
outfile = ... 

to filenames (with absolute paths, to avoid one source of error).
If that doesn't work post the code you wrote along with the error messages.

-- 
https://mail.python.org/mailman/listinfo/python-list


Re: piping with subprocess

2014-02-01 Thread Daniel da Silva
Try this:

from subprocess import check_output
import sys
check_output(textutil -convert html %s -stdout | pandoc -f html -t
markdown -o %s % sys.argv[1:3], shell=True)




On Sat, Feb 1, 2014 at 7:19 AM, Rick Dooling rpdool...@gmail.com wrote:

 I spent half a day trying to convert this bash script (on Mac)

 textutil -convert html $1 -stdout | pandoc -f html -t markdown -o $2

 into Python using subprocess pipes.

 It works if I save the above into a shell script called convert.sh and
 then do

 subprocess.check_call([convert.sh, file, markdown_file])

 where file and markdown_file are variables.

 But otherwise my piping attempts fail.

 Could someone show me how to pipe in subprocess. Yes, I've read the doc,
 especially

 http://docs.python.org/2/library/subprocess.html#replacing-shell-pipeline

 But I'm a feeble hobbyist, not a computer scientist.

 Thanks

 RD
 --
 https://mail.python.org/mailman/listinfo/python-list

-- 
https://mail.python.org/mailman/listinfo/python-list


Re: piping with subprocess

2014-02-01 Thread Rick Dooling
On Saturday, February 1, 2014 6:54:09 AM UTC-6, Peter Otten wrote:
 Rick Dooling wrote:
 
 
 
  I spent half a day trying to convert this bash script (on Mac)
 
  
 
  textutil -convert html $1 -stdout | pandoc -f html -t markdown -o $2
 
  
 
  into Python using subprocess pipes.
 
  
 
  It works if I save the above into a shell script called convert.sh and
 
  then do
 
  
 
  subprocess.check_call([convert.sh, file, markdown_file])
 
  
 
  where file and markdown_file are variables.
 
  
 
  But otherwise my piping attempts fail.
 
 
 
 It is always a good idea to post your best effort failed attempt, if only 
 
 to give us an idea of your level of expertise.
 
 
 
  Could someone show me how to pipe in subprocess. Yes, I've read the doc,
 
  especially
 
  
 
  http://docs.python.org/2/library/subprocess.html#replacing-shell-pipeline
 
  
 
  But I'm a feeble hobbyist, not a computer scientist.
 
 
 
 Try to convert the example from the above page
 
 
 
 
 
 output=`dmesg | grep hda`
 
 # becomes
 
 p1 = Popen([dmesg], stdout=PIPE)
 
 p2 = Popen([grep, hda], stdin=p1.stdout, stdout=PIPE)
 
 p1.stdout.close()  # Allow p1 to receive a SIGPIPE if p2 exits.
 
 output = p2.communicate()[0]
 
 
 
 
 
 to your usecase. Namely, replace
 
 
 
 [dmesg] -- [textutil, -convert, html, infile, -stdout]
 
 [grep, hda] -- [pandoc, -f, html, -t, marktown, -o,
 
  outfile]
 
 
 
 Don't forget to set
 
 
 
 infile = ... 
 
 outfile = ... 
 
 
 
 to filenames (with absolute paths, to avoid one source of error).
 
 If that doesn't work post the code you wrote along with the error messages.

p1 = subprocess.Popen([textutil, -convert, html, file], 
stdout=subprocess.PIPE)
p2 = subprocess.check_call([pandoc, -f, html, -t, markdown, -o, 
markdown_file], stdin=p1.stdout, stdout=subprocess.PIPE)
p1.stdout.close()  # Allow p1 to receive a SIGPIPE if p2 exits.
output = p2.communicate()[0]

Errors

Traceback (most recent call last):
  File /Users/me/Python/any2pandoc.py, line 70, in module
convert_word_file(file, markdown_file)
  File /Users/me/Python/any2pandoc.py, line 59, in convert_word_file
output = p2.communicate()[0]
AttributeError: 'int' object has no attribute 'communicate'

I get a markdown_file created but it's empty.

Thanks,

RD

ps - Daniel's works fine but I still don't learn to pipe :)


-- 
https://mail.python.org/mailman/listinfo/python-list


Re: piping with subprocess

2014-02-01 Thread Rick Dooling
On Saturday, February 1, 2014 7:54:34 AM UTC-6, Rick Dooling wrote:
 On Saturday, February 1, 2014 6:54:09 AM UTC-6, Peter Otten wrote:
 
  Rick Dooling wrote:
 
  
 
  
 
  
 
   I spent half a day trying to convert this bash script (on Mac)
 
  
 
   
 
  
 
   textutil -convert html $1 -stdout | pandoc -f html -t markdown -o $2
 
  
 
   
 
  
 
   into Python using subprocess pipes.
 
  
 
   
 
  
 
   It works if I save the above into a shell script called convert.sh and
 
  
 
   then do
 
  
 
   
 
  
 
   subprocess.check_call([convert.sh, file, markdown_file])
 
  
 
   
 
  
 
   where file and markdown_file are variables.
 
  
 
   
 
  
 
   But otherwise my piping attempts fail.
 
  
 
  
 
  
 
  It is always a good idea to post your best effort failed attempt, if only 
 
  
 
  to give us an idea of your level of expertise.
 
  
 
  
 
  
 
   Could someone show me how to pipe in subprocess. Yes, I've read the doc,
 
  
 
   especially
 
  
 
   
 
  
 
   http://docs.python.org/2/library/subprocess.html#replacing-shell-pipeline
 
  
 
   
 
  
 
   But I'm a feeble hobbyist, not a computer scientist.
 
  
 
  
 
  
 
  Try to convert the example from the above page
 
  
 
  
 
  
 
  
 
  
 
  output=`dmesg | grep hda`
 
  
 
  # becomes
 
  
 
  p1 = Popen([dmesg], stdout=PIPE)
 
  
 
  p2 = Popen([grep, hda], stdin=p1.stdout, stdout=PIPE)
 
  
 
  p1.stdout.close()  # Allow p1 to receive a SIGPIPE if p2 exits.
 
  
 
  output = p2.communicate()[0]
 
  
 
  
 
  
 
  
 
  
 
  to your usecase. Namely, replace
 
  
 
  
 
  
 
  [dmesg] -- [textutil, -convert, html, infile, -stdout]
 
  
 
  [grep, hda] -- [pandoc, -f, html, -t, marktown, -o,
 
  
 
   outfile]
 
  
 
  
 
  
 
  Don't forget to set
 
  
 
  
 
  
 
  infile = ... 
 
  
 
  outfile = ... 
 
  
 
  
 
  
 
  to filenames (with absolute paths, to avoid one source of error).
 
  
 
  If that doesn't work post the code you wrote along with the error messages.
 
 
 
 p1 = subprocess.Popen([textutil, -convert, html, file], 
 stdout=subprocess.PIPE)
 
 p2 = subprocess.check_call([pandoc, -f, html, -t, markdown, -o, 
 markdown_file], stdin=p1.stdout, stdout=subprocess.PIPE)
 
 p1.stdout.close()  # Allow p1 to receive a SIGPIPE if p2 exits.
 
 output = p2.communicate()[0]
 
 
 
 Errors
 
 
 
 Traceback (most recent call last):
 
   File /Users/me/Python/any2pandoc.py, line 70, in module
 
 convert_word_file(file, markdown_file)
 
   File /Users/me/Python/any2pandoc.py, line 59, in convert_word_file
 
 output = p2.communicate()[0]
 
 AttributeError: 'int' object has no attribute 'communicate'
 
 
 
 I get a markdown_file created but it's empty.
 
 
 
 Thanks,
 
 
 
 RD
 
 
 
 ps - Daniel's works fine but I still don't learn to pipe :)

Okay, sorry. I fixed that obvious goof

p1 = subprocess.Popen([textutil, -convert, html, file], 
stdout=subprocess.PIPE)
p2 = subprocess.Popen([pandoc, -f, html, -t, markdown, -o, 
markdown_file], stdin=p1.stdout, stdout=subprocess.PIPE)
p1.stdout.close()  # Allow p1 to receive a SIGPIPE if p2 exits.
output = p2.communicate()[0]

Now I get no errors, but I still get a blank markdown file.
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: piping with subprocess

2014-02-01 Thread Mark Lawrence

On 01/02/2014 13:54, Rick Dooling wrote:

On Saturday, February 1, 2014 6:54:09 AM UTC-6, Peter Otten wrote:

Rick Dooling wrote:




I spent half a day trying to convert this bash script (on Mac)







textutil -convert html $1 -stdout | pandoc -f html -t markdown -o $2







into Python using subprocess pipes.







It works if I save the above into a shell script called convert.sh and



then do







subprocess.check_call([convert.sh, file, markdown_file])







where file and markdown_file are variables.







But otherwise my piping attempts fail.




It is always a good idea to post your best effort failed attempt, if only

to give us an idea of your level of expertise.




Could someone show me how to pipe in subprocess. Yes, I've read the doc,



especially







http://docs.python.org/2/library/subprocess.html#replacing-shell-pipeline







But I'm a feeble hobbyist, not a computer scientist.




Try to convert the example from the above page





output=`dmesg | grep hda`

# becomes

p1 = Popen([dmesg], stdout=PIPE)

p2 = Popen([grep, hda], stdin=p1.stdout, stdout=PIPE)

p1.stdout.close()  # Allow p1 to receive a SIGPIPE if p2 exits.

output = p2.communicate()[0]





to your usecase. Namely, replace



[dmesg] -- [textutil, -convert, html, infile, -stdout]

[grep, hda] -- [pandoc, -f, html, -t, marktown, -o,

  outfile]



Don't forget to set



infile = ...

outfile = ...



to filenames (with absolute paths, to avoid one source of error).

If that doesn't work post the code you wrote along with the error messages.


Would you please read and action this 
https://wiki.python.org/moin/GoogleGroupsPython to prevent us seeing the 
double line spacing above, thanks.


--
My fellow Pythonistas, ask not what our language can do for you, ask 
what you can do for our language.


Mark Lawrence

--
https://mail.python.org/mailman/listinfo/python-list


Re: piping with subprocess

2014-02-01 Thread Rick Dooling
On Saturday, February 1, 2014 8:00:59 AM UTC-6, Rick Dooling wrote:
 On Saturday, February 1, 2014 7:54:34 AM UTC-6, Rick Dooling wrote:
 
  On Saturday, February 1, 2014 6:54:09 AM UTC-6, Peter Otten wrote:
 
   Rick Dooling wrote:
 
I spent half a day trying to convert this bash script (on Mac)
textutil -convert html $1 -stdout | pandoc -f html -t markdown -o $2
into Python using subprocess pipes.
 
It works if I save the above into a shell script called convert.sh and
then do
  
subprocess.check_call([convert.sh, file, markdown_file])
 
where file and markdown_file are variables.
 
But otherwise my piping attempts fail.
 
   It is always a good idea to post your best effort failed attempt, if 
   only to give us an idea of your level of expertise.
Could someone show me how to pipe in subprocess. Yes, I've read the doc,
especially 
http://docs.python.org/2/library/subprocess.html#replacing-shell-pipeline
 
But I'm a feeble hobbyist, not a computer scientist.
 
   Try to convert the example from the above page
 
   
 
   output=`dmesg | grep hda`
 
   # becomes
 
   p1 = Popen([dmesg], stdout=PIPE)
 
   p2 = Popen([grep, hda], stdin=p1.stdout, stdout=PIPE)
 
   p1.stdout.close()  # Allow p1 to receive a SIGPIPE if p2 exits.
 
   output = p2.communicate()[0]
 
   
 
   to your usecase. Namely, replace
 
   [dmesg] -- [textutil, -convert, html, infile, -stdout]
 
   [grep, hda] -- [pandoc, -f, html, -t, marktown, -o
   outfile]
 
   Don't forget to set
 
   infile = ... 
 
   outfile = ... 
 
   to filenames (with absolute paths, to avoid one source of error).
 
   If that doesn't work post the code you wrote along with the error 
   messages.
 
  p1 = subprocess.Popen([textutil, -convert, html, file], 
  stdout=subprocess.PIPE)
 
  p2 = subprocess.check_call([pandoc, -f, html, -t, markdown, -o, 
  markdown_file], stdin=p1.stdout, stdout=subprocess.PIPE)
 
  p1.stdout.close()  # Allow p1 to receive a SIGPIPE if p2 exits.

  output = p2.communicate()[0]
  Errors
  Traceback (most recent call last):
File /Users/me/Python/any2pandoc.py, line 70, in module
  convert_word_file(file, markdown_file)
File /Users/me/Python/any2pandoc.py, line 59, in convert_word_file
  output = p2.communicate()[0]
  AttributeError: 'int' object has no attribute 'communicate'
  I get a markdown_file created but it's empty.
  Thanks,
  RD
  ps - Daniel's works fine but I still don't learn to pipe :)
 Okay, sorry. I fixed that obvious goof

 p1 = subprocess.Popen([textutil, -convert, html, file], 
 stdout=subprocess.PIPE)
 
 p2 = subprocess.Popen([pandoc, -f, html, -t, markdown, -o, 
 markdown_file], stdin=p1.stdout, stdout=subprocess.PIPE)
 
 p1.stdout.close()  # Allow p1 to receive a SIGPIPE if p2 exits.
 
 output = p2.communicate()[0]
 
 Now I get no errors, but I still get a blank markdown file.

Okay, blank lines removed. Apologies. I didn't know Google inserted them.

RD
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: piping with subprocess

2014-02-01 Thread Mark Lawrence

On 01/02/2014 15:35, Rick Dooling wrote:


Okay, blank lines removed. Apologies. I didn't know Google inserted them.

RD



No problem, the whole snag is people don't know about this flaw in this 
tool until they're told about it.


--
My fellow Pythonistas, ask not what our language can do for you, ask 
what you can do for our language.


Mark Lawrence

--
https://mail.python.org/mailman/listinfo/python-list


Re: piping with subprocess

2014-02-01 Thread Peter Otten
Rick Dooling wrote:

 On Saturday, February 1, 2014 6:54:09 AM UTC-6, Peter Otten wrote:

 Try to convert the example from the above page
 
 
 output=`dmesg | grep hda`
 # becomes
 p1 = Popen([dmesg], stdout=PIPE)
 p2 = Popen([grep, hda], stdin=p1.stdout, stdout=PIPE)
 p1.stdout.close()  # Allow p1 to receive a SIGPIPE if p2 exits.
 output = p2.communicate()[0]
 
 
 to your usecase. Namely, replace
 
 [dmesg] -- [textutil, -convert, html, infile, -stdout]
 [grep, hda] -- [pandoc, -f, html, -t, marktown, -o,
  outfile]
 
 Don't forget to set
 
 infile = ...
 outfile = ...
 
 to filenames (with absolute paths, to avoid one source of error).
 If that doesn't work post the code you wrote along with the error
 messages.
 
 p1 = subprocess.Popen([textutil, -convert, html, file],
 stdout=subprocess.PIPE) 
 p2 = subprocess.check_call([pandoc, -f,
 html, -t, markdown, -o, markdown_file], stdin=p1.stdout,
 stdout=subprocess.PIPE)
 p1.stdout.close()  # Allow p1 to receive a SIGPIPE if p2 exits.
 output = p2.communicate()[0]
 
 Errors
 
 Traceback (most recent call last):
   File /Users/me/Python/any2pandoc.py, line 70, in module
 convert_word_file(file, markdown_file)
   File /Users/me/Python/any2pandoc.py, line 59, in convert_word_file
 output = p2.communicate()[0]
 AttributeError: 'int' object has no attribute 'communicate'
 
 I get a markdown_file created but it's empty.

Well, you replaced the Popen() from the example with a check_call() which 
uses a Popen instance internally, but does not expose it. 

I recommend that you stick as closely to the example as possible until you 
have a working baseline version. I'd try

textutil = subprocess.Popen(
[textutil, -convert, html, file], 
stdout=subprocess.PIPE)
pandoc = subprocess.Popen(
[pandoc, -f, html, -t, markdown, -o, markdown_file],
stdin=textutil.stdout)

textutil.stdout.close()
pandoc.communicate()


-- 
https://mail.python.org/mailman/listinfo/python-list