【问题标题】:Python 3 subprocess SIGABRTPython 3 子进程 SIGABRT
【发布时间】:2019-06-28 12:20:20
【问题描述】:

我正在尝试使用 subprocess.Popen 运行 Node.js 工具,该工具最终通过 SSH 连接到另一台机器。当我在 Python 2 中运行它时,一切正常。但是,当我通过 Python 3 运行完全相同的命令时,它崩溃并显示错误代码 -6(我使用 check_output 来确定它因 SIBABRT 而死)。

现在,这是更奇怪的部分。如果我通过 python3 终端运行 subprocess 命令,它将顺利运行。但是,当我在它的外部添加一个 Node.js 包装器(我工作的软件的一部分,我对此无能为力)时,它就坏了。 Python 2 与 Node.js 包装器一起工作。老实说,我现在不确定它会是什么。

这里是代码(不显示命令,因为它是一个内部工具):

p = Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, bufsize=1, universal_newlines=True)
output,stderr_data = p.communicate()
if p.returncode != 0:
    logging.error('return code')
    logging.error( "-----%r failed, status code %r" % (cmd, p.returncode) + "------")
    raise RuntimeError('%r failed, status code %s' % (cmd, p.returncode))

我试过检查 stderr 和 stdout,但它们似乎都是空的。

我正在运行 Python 3.6.4、Python 2.7.5、Node 6.9.1 和 CentOS 7

编辑:似乎 SIGABRT 发生在我尝试通过 Popen 运行任何节点命令时。我尝试用 ['node'] 和 ['node', 'test_node.js'] 替换 cmd 并且都死于 SIGABRT...

【问题讨论】:

    标签: python subprocess python-3.6


    【解决方案1】:

    我只是有完全相同的行为,解决方案是摆脱 pm2 作为顶级程序运行器。

    我有以下设置:

    pm2-runtime
        v
    python app with subprocess.run('node ...')
        v
    nodejs app
    

    没有pm2-runtimesubprocess.run 与 nodejs 一起工作就好了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-06
      • 1970-01-01
      • 2017-02-13
      • 1970-01-01
      • 1970-01-01
      • 2012-03-15
      • 2019-07-09
      • 1970-01-01
      相关资源
      最近更新 更多