【发布时间】: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