我正在尝试使用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消亡...
我只是拥有完全相同的行为,而解决方案已摆脱了作为顶级程序运行程序的pm2。
我有以下设置:
pm2-runtime
v
python app with subprocess.run('node ...')
v
nodejs app
没有pm2-runtime
subprocess.run
可以很好地与nodejs一起使用。