c语言popen函数多线程,对POPEN的调用导致线程内挂起

我已经运行了下面的代码,它运行正确。您提到过“如果返回代码为非零,请检查输出栏”,请查看check_output docs它引发了一个CalledProcessError异常,您可以捕捉到该异常,并将所有错误详细信息包含在一个很好的结构中。在import threading, subprocess, random, time, pprint

from subprocess import check_output

class WorkerThread(threading.Thread):

def __init__(self, user, host, script, runner):

super(WorkerThread, self).__init__()

self.user = user

self.host = host

self.script = script

self.runner = runner

def run(self):

cmd = "ssh {user}@{host} 'bash -s' < {script}".format(**self.__dict__)

self.runner.complete(check_output(cmd, shell=True))

class Runner(object):

def complete(self, output):

print 'output:\n', output

WorkerThread('marwan', 'homebox', 'local_script.sh', Runner()).start()

上面的代码遵循您在问题中发布的相同结构。但我不建议你采取这种方法这里有一些建议:从您称为runner的WorkerThread中,我不知道runner的详细信息,但是在进行多线程编程时,最健壮的线程安全选项是使用Queue进行通信。在

这里有许多优秀的库,它们可以像您在这里所做的那样。他们经过了很好的测试,而且做得很干净。paramiko非常好,Fabric也非常好。在

简单结构远程运行示例

^{pr2}$

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值