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

send input through stdin in python subprocess.popen

我想通过 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 而不是 运行 以更好地控制过程,并且 shell 设置为 true,因此 OS 变量被视为 ex。 $路径

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

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

我们也可以使用pythonoS包来运行操作系统命令 使用 os 封装 popen 方法并使用 read 函数读取输出

代码:

进口os

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

输出=stream.read()

打印(输出)