相关疑难解决方法(0)

欺骗应用程序认为它的标准输出是一个终端,而不是管道

我正试图做相反的事情

检测stdin是终端还是管道?

我正在运行一个正在更改其输出格式的应用程序,因为它检测到stdout上的管道,我希望它认为它是一个交互式终端,以便在重定向时获得相同的输出.

我当时认为将它包装在expect脚本中或使用proc_open()PHP中的它会这样做,但事实并非如此.

有什么想法吗?

bash terminal stdin pipe

137
推荐指数
7
解决办法
5万
查看次数

如何在node.js中运行交互式shell命令?

我必须在node.js中运行一些交互式shell命令.让我们的交互式shell $ python:

var cp = require('child_process');
var pythonChildProcess = cp.spawn('python');

pythonChildProcess.stdout.on("data", function(data) {
  console.log('data successfully written!', data); // never outputs anything
});

pythonChildProcess.stdin.write('1 + 1');
pythonChildProcess.stdin.end();
Run Code Online (Sandbox Code Playgroud)

此代码不输出任何内容(但应该是stdout 2).

但如果它会,那将会有另一个问题:如何让它互动?我打电话过程结束pythonChildProcess.stdin.end();!但我只是想结束stdin并写下一个stdin!

UPD:如果我可以模仿按下enter按钮 - 我将能够以交互方式写入该过程.但是添加\n到输入字符串的末尾并没有帮助.

javascript shell node.js

13
推荐指数
3
解决办法
9555
查看次数

Node.js 从 stdin 读取时无法读取 python 子进程 stdout

我有一个 node.js 脚本,它启动一个 python 子进程并读取它的标准输出。只要 python 进程不尝试从 stdin 读取数据,这种方法就有效。那么父进程就不会从子进程那里得到任何东西。

我这里有 node.js 脚本和两个 python 测试用例:(如果您注释尝试从 stdin 读取的行,这两个示例都有效)

第一个孩子:

import sys

print('before')

for line in sys.stdin:
    print(line)

print('after')
Run Code Online (Sandbox Code Playgroud)

第二个孩子:

import sys 

print('before')

while True:
    line = sys.stdin.readline()

    if line != '':
        print(line)
    else:
        break

print('after')
Run Code Online (Sandbox Code Playgroud)

家长:

const spawn = require('child_process').spawn;

let client = spawn('python', ['test1.py'], {cwd: '/tmp'});

client.stdout.on('data', (data) => {
  console.log(data.toString());
});

client.stderr.on('data', (data) => {
  console.log(data.toString());
});

client.on('close', () => {
  console.log('close');
});

client.on('exit', () => {
  console.log('exit');
});


client.on('disconnect', …
Run Code Online (Sandbox Code Playgroud)

python stdin stdout process node.js

2
推荐指数
1
解决办法
2571
查看次数

标签 统计

node.js ×2

stdin ×2

bash ×1

javascript ×1

pipe ×1

process ×1

python ×1

shell ×1

stdout ×1

terminal ×1