hm除非我忘了rtm,這段代碼將永遠不會工作。 cp.exec沒有這樣的輸入選項。
但是有一個stdio選項,會讓我們打開孩子的預期stdio。
child_process.exec('cat - > /tmp/test1', { stdio: 'pipe' });
看https://nodejs.org/api/child_process.html#child_process_options_stdio
stdio
s爲不串,它們是流,我們可以結束/寫/管材/關閉/推等
看到https://nodejs.org/api/stream.html
注意,標準輸入是一個可寫,stdout/stderr是可讀的。
要編寫cat
的stdin,您現在將使用cp.stdin對象並調用其end()方法。
child_process.exec('cat - > /tmp/test1', { stdio: 'pipe' }).stdin.end('hello world');
請注意,end方法是一個寫入,然後流終止,這是告訴貓退出所需的流。
爲了確保工作正常,我們應該重構它,不要將stdin發送到文件,而是將child.stdout傳遞給process.stdout。
var child_process = require('child_process');
var cp = child_process.exec('cat -', { stdio: 'pipe' });
cp.stdin.end('hello world');
cp.stdout.pipe(process.stderr);
請注意,該過程是一個全球性的。
輸入應該做什麼?我在'exec'的文檔中沒有看到任何地方。我想你需要爲此使用'spawn'。 –
嗯。我沒有注意到這一點。似乎所有的同步進程都有輸入選項,而沒有一個異步進程擁有它。 「input」是要傳遞給stdin的字符串值。如前所述,無論如何,我想切換到同步。我認爲我的問題的一部分是,當我們需要一個庫將其分配給一個變量時,我感到困惑。我不習慣那樣。看來變量的名字也很重要。你能否介紹一下這個問題。我認爲這可能會有所幫助。 – user3311045
也許這會更好,如果我只是切入追逐。如何更改我的代碼以便使用child_process.execSync而不是child_process.exec?我認爲只需在第二行代碼中將「child_process.exec」更改爲「child_process.execSync」即可輕鬆完成。但是,這似乎並不奏效。我收到有關沒有exec.Sync方法的投訴。 – user3311045