我想通过 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。 $路径
此代码相当于您开始
node
,然后输入--version
并按回车键。这样,node 将尝试将其解释为 JavaScript 语句,并且它不识别名称version
。相反,您应该将其作为命令行参数传递:
subprocess.Popen(["node", "--version"], ...)
我们也可以使用python oS包来运行opearting系统命令 使用 os package popen 方法并使用 read 函数读取输出
import os
stream = os.popen('node --version')
output = stream.read()
print(output)