This is an automatically generated e-mail. To reply, visit: http://reviewboard-fedoraserver.rhcloud.com/r/127/

I tried to use the code with a small bash script that is simply writing the strings read from stdin to a log file. The call to the script with writing several lines to it does not return before I press Ctrl-D in the term calling the python scriptlet. Additionally there is no output in the log file.

Here is the test code:

import os import pwd import subprocess from rolekit.functions import writefile from tempfile import SpooledTemporaryFile

def temporary_stdin(io_input): """ Create a temporary in-memory file object to store input for subprocess_future() calls. This is useful for passing passwords without specifying them on the command line (which would cause them to appear in the process table) """ f = SpooledTemporaryFile() f.write(io_input) f.seek(0)

writefile("/tmp/readstdin", '#!/bin/bash\nwhile read line\ndo\necho "$line" >> /tmp/readstdin.log\ndone\n')

stdinfile = temporary_stdin("line 1\nline 2\nline 3\n") preexec_fn = None args = [ "/bin/bash", "/tmp/readstdin" ]

try: process = subprocess.Popen(args, close_fds=True, stdin=stdinfile, stdout=subprocess.PIPE, stderr=subprocess.PIPE, preexec_fn=preexec_fn) except OSError, e: if e.errno is errno.EPERM: # Could not change users prior to executing the subprocess print("ERROR: Insufficient privileges to impersonate UID/GID %s/%s" % (uid, gid)) raise

print process.stdout.read()


- Thomas Woerner


On January 22nd, 2015, 10 p.m. UTC, Stephen Gallagher wrote:

Review request for RoleKit Mailing List, Miloslav Trmac, Stephen Gallagher, and Thomas Woerner.
By Stephen Gallagher.

Updated Jan. 22, 2015, 10 p.m.

Repository: rolekit

Description

Add utility routine for passing stdin into subprocesses

Diffs

  • src/rolekit/async.py (0f9ddaac1beb27cebdf41ca0383a62a807c4fcb6)
  • src/rolekit/util.py (f3825d748475ea837e84004129459083269d9686)

View Diff