在 python subprocess.popen 中通过标准输入发送输入

问题描述 投票:0回答:2

我想通过 subprocess 模块启动 nodejs 并向它发送输入但面临以下错误...

代码:

import subprocess
def popen(self):
    cmd = "node"
    args = "--version"
    spawn = subprocess.Popen(cmd,shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
    (out,err)=spawn.communicate(args)
    print(out)
    print(err)

结果:

    [stdin]:1
--version
^

ReferenceError: version is not defined
    at [stdin]:1:1
    at Script.runInThisContext (vm.js:132:18)
    at Object.runInThisContext (vm.js:309:38)
    at internal/process/execution.js:77:19
    at [stdin]-wrapper:6:22
    at evalScript (internal/process/execution.js:76:60)
    at internal/main/eval_stdin.js:29:5
    at Socket.<anonymous> (internal/process/execution.js:198:5)
    at Socket.emit (events.js:327:22)
    at endReadableNT (_stream_readable.js:1327:12)

预期结果:

v14.14.0

基本上,我想启动节点并与之通信,在需要时发送输入。

选择 Popen 而不是 run 以更好地控制进程,并将 shell 设置为 true,因此操作系统变量被视为 ex。 $路径

python python-3.x subprocess stdin communicate
2个回答
2
投票

此代码相当于您开始

node
,然后输入
--version
并按回车键。这样,node 将尝试将其解释为 JavaScript 语句,并且它不识别名称
version
。相反,您应该将其作为命令行参数传递:

subprocess.Popen(["node", "--version"], ...)

0
投票

我们也可以使用python oS包来运行opearting系统命令 使用 os package popen 方法并使用 read 函数读取输出

import os

stream = os.popen('node --version')

output = stream.read()

print(output)
© www.soinside.com 2019 - 2024. All rights reserved.