假设当前nodejs要运行命令rm -rf 123.txt
,那么代码就是
process.exec('rm -rf 123.txx',function (error, stdout, stderr) {
if (error !== null) {
console.log('exec error: ' + error);
}else {
console.log(stdout)
}
});
OK,这里确实删除了。但是如果加上sudo呢?比如sudo rm -rf 123.txt
,需要输入密码才能删除。下面是我尝试的办法,但是无法删除:
process.exec('sudo rm -rf 123',function (error, stdout, stderr) {
if (error !== null) {
console.log('exec error: ' + error);
}else {
process.exec('密码',function (error, stdout, stderr) {
if (error !== null) {
console.log('exec error: ' + error);
}else {
console.log(stdout)
}
});
console.log(stdout)
}
});
这是我尝试嵌套process.exec来解决,但是发现无法解决。
上面是个例子,实际项目中我需要使用nodejs来调用python或者其他脚本。
比如xxx.py
,在实际终端下他是这样的:
test@test:~/$ python xxx.py
info:xxxxxxx
请问是否继续么?(Y or N):Y
sys_info:xxxxx
请问是否退出?(Y or N):N
log_info:xxxxx
test@test:~/$
如果nodejs调用的话,该怎么办,怎么让提示信息为请问是否继续么?(Y or N):
时自动输入Y,并回车继续向下执行。当提示信息为请问是否退出?(Y or N):
时,自动输入N,然后回车运行。
sudo
コマンドには-S
オプションがあり、パスワードの入力が必要な場合にパスワードを読み取るために使用されます。パスワードが
111111
であるとすると、完全なコマンドは次のようになります。同様に、ノードコードは次のようになります。
スタックオーバーフロー
私は一日中これに取り組んでいました。
問題は、生成されたプロセスの STDOUT がその出力バッファをフラッシュする必要があることです。そうしないと、バッファがいっぱいになるまでそこに留まり、その場合、コードは再度実行されなくなります。
p.stdin.end() はプロセスを終了するだけであり、その性質上、OS はすべてのバッファをクリアできます。
これは出力バッファの所有者ではないため、ノードからこれを行うことはできません。
面倒ですが、スクリプトを制御できる限り、スクリプトを変更できます。自動フラッシュを設定するコマンド ライン オプションを使用できるようにすることもできます。
これが何らかのお役に立てば幸いです。
パスワードを要求する sudo の出力ではバッファがフラッシュされず、ノードのデータがトリガーされないため、次のコードは機能しません。
子プロセスがバッファのフラッシュを呼び出す場合 (Python
sys.stdin.flash
など)、理論上はこのセクションと同様のコードが機能します。