In article <[EMAIL PROTECTED]>,
Nick Craig-Wood <[EMAIL PROTECTED]> wrote:
>Dennis Lee Bieber <[EMAIL PROTECTED]> wrote:
>> On Thu, 17 Aug 2006 17:16:25 +0000, [EMAIL PROTECTED] (Cameron Laird)
>> declaimed the following in comp.lang.python:
>>
>> > Question:
>> > import subprocess, StringIO
>> >
>> > input = StringIO.StringIO("abcdefgh\nabc\n")
>>
>> Here you override the builtin function "input()"
>> > # I don't know of a compact, evocative, and
>> > # cross-platform way to exhibit this behavior.
>> > # For now, depend on cat(1).
>> > p = subprocess.Popen(["cat"], stdout = subprocess.PIPE,
>> > stdin = response)
>>
>> Here you specify the non-existant "response"
>
>Assume the OP meant to write this
>
>>>> import subprocess, StringIO
>>>> inp = StringIO.StringIO("abcdefgh\nabc\n")
>>>> p = subprocess.Popen(["cat"], stdout = subprocess.PIPE, stdin = inp)
>Traceback (most recent call last):
> File "<stdin>", line 1, in ?
> File "/usr/lib/python2.4/subprocess.py", line 534, in __init__
> (p2cread, p2cwrite,
> File "/usr/lib/python2.4/subprocess.py", line 830, in _get_handles
> p2cread = stdin.fileno()
>AttributeError: StringIO instance has no attribute 'fileno'
>>>>
.
.
.
Yes; my apologies for the confusion I introduced by "editing
for publication", and doing it badly.
Your interactive session does indeed exhibit the behavior that
puzzles me. My expectation was that StringIO and the std*
parameters to Popen() were made for each other; certainly there
are many cases where stdout and stderr can be redirected *to* a
StringIO. Is it simply the case that stdin demands a more
file-like object? While that disappoints me, I certainly can
program around it. My question, then: does stdin effectively
require something really in the filesystem, or perhaps the
stdout of a previous subprocess? Is there no built-in way to
feed it an in-memory construct?
--
http://mail.python.org/mailman/listinfo/python-list