0
def execute_on_host((hostname, command), username=config['username'], keyfile=config['keyfile']):

    print hostname
    ssh_client = paramiko.SSHClient()
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh_client.connect(hostname=hostname, username=username, key_filename=keyfile)
    stdin, stdout, stderr = ssh_client.exec_command(command)
    print stdout.read()
    ssh_client.close()
    return stdout

So, after the hostname and stdout.read() is printed, I get errors like these

Process PoolWorker-1:
Traceback (most recent call last):
  File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/lib/python2.7/multiprocessing/pool.py", line 99, in worker
    put((job, i, result))
  File "/usr/lib/python2.7/multiprocessing/queues.py", line 390, in put
    return send(obj)
PicklingError: Can't pickle <type 'cStringIO.StringO'>: attribute lookup cStringIO.StringO failed

I am using the following code to execute the command.

from multiprocessing import Pool
pool = Pool(len(host_cmds_list))
pool.map(execute_on_host, host_cmds_list)
pool.close()
pool.join()

I am not sure how to fix this.

print host_cmds_list
[('hostname1', '/bin/date'), ('hostname2', '/bin/date')]
4

1 に答える 1

4

あなたstdoutcStringIO漬け物にできないものです。オブジェクト自体ではなく、その内容を返してみてください。

于 2012-11-01T11:41:33.443 に答える