Python 3子进程SIGABRT

问题描述 投票:1回答:1

我正在尝试使用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运行ANY节点命令的任何时候。我尝试用['node']和['node','test_node.js']替换cmd,并且都用SIGABRT消亡...

python subprocess python-3.6
1个回答
0
投票

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

我有以下设置:

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

没有pm2-runtime subprocess.run可以很好地与nodejs一起使用。

© www.soinside.com 2019 - 2024. All rights reserved.