- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有两个脚本 A.js 和 B.js,以及一个第三方应用程序(开源)。脚本 A.js 使用 execSync
启动第 3 方应用程序。脚本 B.js 使用 spawn
启动脚本 A.js。
如果我单独运行脚本 A.js,我可以看到第 3 方应用程序的完整输出。当我通过运行脚本 B.js 间接运行它时,我只能看到一些输出。
A.js
const { execSync } = require('child_process');
console.log("Hello");
execSync('mybinary.exe -arg1 -arg2', { stdio: 'inherit' });
B.js
const { spawn } = require('child_process');
const app = spawn(process.execPath, ['A.js'], {
stdio: ['inherit', null, 'inherit']
});
app.stdout.on('data', (chunk) => {
process.stdout.write(chunk);
});
当我启动 B 时,我只看到“Hello”,但是二进制文件正在运行(它是一个服务器,我可以打开到它的 TCP 连接)。我只是没有看到输出。当我单独启动 A 时,我会看到“Hello”和常规二进制文件的输出。
如果我将 B 的标准输出更改为“继承”,它就会起作用。
为什么会发生这种情况,如何解决这个问题?
更新:似乎与使用两个脚本没有任何关系。不使用 stdio 继承直接生成二进制文件也会出现同样的问题。似乎依赖于第三方应用程序。 如果程序只是打印到标准输出,它如何影响 Node ?
上下文:我想启动服务器,然后在服务器准备就绪时运行命令。准备好后,服务器会打印出特定的消息。我们的想法是等待该消息被打印。打印出此消息后,它不会打印任何其他内容,但它会保持运行状态。
我尝试通过管道传输的特定可执行文件是 ChatScript server .
更新:此时,我认为它与我尝试通过管道传输的特定二进制文件有关。我想了解二进制文件如何影响此行为,即使用继承而不是管道。 如果有人可以使用 Node 脚本(或 C 程序)重新创建此行为,那就可以回答这个问题。
<小时/>环境
请注意,这与此处的问题相同:node.js child_process.spawn no stdout unless 'inherit'
最佳答案
chatscript 正在执行的写入操作是“fprintf( stdout, ...)”,这是一个缓冲输出,并且会保存到类似 (4k?) 的缓冲然后刷新。例如,在 ChatScript/src/os.cpp 第 1849 行中的 fprintf( stdout ) 之后添加 'fflush(stdout)' ...然后输出就可以工作(某种程度上,需要进一步的更改,但我至少在 cs_init.d 中得到了 'fflush(stdout)' 。 txt' 错误现在正在记录。
另一个测试是将 chatscript.exe 重定向到一个文件并查看该文件获取的内容。 'chatscript > zz',然后用 ctrl-c 结束聊天脚本,您会看到 zz 也为空白...这表明 IO 已被缓冲并且未正确刷新到输出。
M:\javascript\test_exec>node b.js
Hello
in cs_init.txt at 0:
A subdirectory or file USERS already exists.
Error opening utf8writeappend file LOGS/startlog.txt: No such file or directory
ChatScript Release Version 7.5 pid: 0 32 bit Windows compiled Jun 24 2017 09:42:13 host=local
Params: dict:2097151 fact:800000 text:100000kb hash:215127
buffer:80x80kb cache:1x5000kb userfacts:100 outputlimit:80000 loglimit:80000
Unable to read dictionarySystem.h
Missing 37 word files
read 0 raw words
in facts.txt at 0:
A subdirectory or file USERS already exists.
关于node.js - 无法为特定应用程序从 Spawn 传输标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44344448/
对于上下文,routes\index.js:87 在我的 exec 周围(同步)或在我的 exec 内部(异步)。 我在使用库 child_process、win-spawn 或 cross-spaw
我一直在尝试使用 Programming Erlang,版本 2(Joe Armstrong 的书)。我正在尝试解决第 13 章中的第一个问题。 作为解决问题的办法——我想到了这个—— -module
使用rust 0.12。 假设我有一个可发送的闭包,它的定义完全独立于应该在另一个任务中生成它的代码。 关闭类型: type closure_type = ||: 'static + Send; 代码
我相信我在某处读到使用 spawn/1 之间存在差异和 spawn/3谈到热重载,但我找不到有关该主题的任何完整信息。所以我想知道是否真的有区别,如果有,那是什么?一些例子会很棒。谢谢你。 最佳答案
我无法编译这个简单的程序 #include #include #include #include int main(){ printf("Spawning new process...\n")
NetworkObject.spawn()不起作用!我正在为游戏对象使用unity netcode,并尝试通过使用主机实例化它来产生一个游戏对象,然后在客户机上使用getComponent().spa
有没有办法确定所有生成的子进程何时关闭或退出? 例如,我如何确定没有更多进程可以运行,或者换句话说,我的 500 个子进程已全部退出? for (let index = 0; index {
我最近一直在开发一个按需构建服务器。构建服务器是一个 NodeJS/Express REST API,它本质上包装了 Angular CLI 和相关的构建工具,用于完成自定义的按需 Angular 应
我正在尝试使用外部包: npm install [python-shell][1] 现在,我只有基本的 js 文件和包附带的示例: console.log('hey in main.js') var
我正在尝试让 spawn 影响 rm -rf node_modules 后跟 npm install(在 Windows 7 上; nx 个命令由透明安装的 CygWin 提供。所有 nx 个命令都可
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我正在尝试使用 spawn() 创建子进程有自己的终端 父.js: const spawn = require('child_process').spawn; console.log('started
我正在尝试使用 spawn 运行此命令 var args = ['-ss','00:00:15','-i',storage_path + doc.file_name,'-vframes','1','-
我开始使用 Erlang,在应用从 spawn/3 返回的 PID 时,可以帮助理解不同的结果。到process_info/1方法。 给定这个简单的代码,其中 a/0函数被导出,它只是调用 b/0 ,
我正在尝试运行一个非常简单的 tcl 脚本 package require Expect spawn sftp user@host 我得到的错误是 The system cannot find the
我使用 npm 全局安装了 phantomJs。为什么此代码不起作用? var page = require('webpage').create(); var spawn = require('ch
当我决定自学编程时,我从 Java 开始。尽管我熟悉编写简单的程序化软件(主要是用 PHP),但我最近开始意识到,对于更复杂的操作,我依赖对象。 我的第一个 Java 游戏通过实例化对象以随机速度在随
Julia 的run 函数似乎难以运行source。奇怪的是,如果我在 shell 中运行完全相同的命令,它不会有问题。 有没有办法从 Julia 以编程方式运行命令? julia> cmd = "/
当我运行 grunt-open 时,我不断收到“警告:Spawn ENOENT”问题。 我的设置 我的所有项目文件都在 Google 云端硬盘上。我正在直接对文件进行开发(使用 Google 云端硬盘
当我使用 100 个传感器运行时,我收到了 Erlang 的响应,所有进程都返回某个版本的 进程 中出现错误,退出值:{undef,[{main,watcher_start,[10,0],[]}]}
我是一名优秀的程序员,十分优秀!