描述問題/錯誤/疑問
我想在 Windows 命令行中執行外部程式時取得輸出。所以我使用了執行命令節點來執行命令,但它總是給我空的標準輸出。在版本 1.xx 時我能看到標準輸出,但在版本 2.xx 時就看不到了。我也試過將輸出重新導向到文字檔,但文字檔內部仍然是空的。在本機執行命令能正常工作,但在 n8n 內執行就看不到標準輸出
錯誤訊息是什麼(如果有的話)?
請分享你的工作流程
分享最後一個節點返回的輸出
關於你的 n8n 設定的資訊
- n8n 版本:2.29.9
- 資料庫(預設:SQLite):預設
- n8n EXECUTIONS_PROCESS 設定(預設:own, main):預設
- 執行 n8n 的方式(Docker、npm、n8n cloud、桌面應用):npm
- 作業系統:Windows Server 2022
嗨 @Ruriko
若要驗證 stdout 是否真正運作,請移除檔案重新導向和 cd 命令。使用可執行檔的絕對路徑。這樣可以排除 cd 失敗或輸出被隱藏在檔案中的可能性。
在您的節點中嘗試此命令:
"C:\Users\Administrator\Desktop\Tools\MediaInfo_CLI_26.05_Windows_x64\mediainfo.exe" "C:\Users\Administrator\Desktop\Anime\Upload\[Gecko]..." 2
如果上述命令仍然返回空的 stdout,錯誤可能隱藏在 stderr 中。您可以通過在命令末尾新增 2>&1 來強制 Windows 將錯誤串流合併到輸出串流中。
修改後的命令:
"C:\Users\Administrator\Desktop\Tools\MediaInfo_CLI_26.05_Windows_x64\mediainfo.exe" "C:\Users\Administrator\Desktop\Anime\Upload\[Gecko]..." 2>&1
由於您執行的是 Windows Server 2022,請檢查哪個使用者正在執行 n8n 流程。
- 如果 n8n 以服務的形式執行或以不同於「Administrator」的使用者身分執行,它將沒有權限寫入
C:\Users\Administrator\Desktop\...。
- **解決方案:**將您的工具和輸出資料夾移至根層級目錄(例如
C:\n8n-tools\),並向 Everyone 群組或執行 n8n 的特定使用者授予「完全控制」權限。
我嘗試了這兩個指令,但仍然返回空輸出。此伺服器上沒有其他使用者,n8n 也不是以服務方式運行。我嘗試將工具移至根層級,但仍然返回空輸出
請按順序執行這三項測試。這些測試旨在精確隔離「靜默」的來源。
將整個命令替換為以下內容:
echo Hello from n8n
- 如果沒有輸出: 問題在於 n8n 與您 Server 2022 執行個體上的
cmd.exe 之間的基本通信失敗。
- 如果正常運作:
Execute Command 節點運作正常,問題特定於外部 .exe 檔案的處理方式。
執行此命令列出您工具目錄中的檔案:
dir "C:\n8n-tools"
(將 C:\n8n-tools 替換為您移動工具的實際根路徑)。
- 如果沒有輸出: n8n 無法生成可存取檔案系統的 Shell 程序,儘管資料夾位於根目錄。
- 如果正常運作: Shell 運作完美,我們正在處理應用程序級別的故障。
再次執行您的 MediaInfo 命令,但在最後添加 2>&1。這會強制 Windows 將錯誤流合併到輸出流中。
請確切使用此格式:
"C:\n8n-tools\MediaInfo_CLI_26.05_Windows_x64\mediainfo.exe" "C:\n8n-tools\test_file.mkv" 2>&1
(確保路徑正確對應您的新根位置)。
請告訴我結果
What about this?
""C:\n8n-tools\MediaInfo_CLI_26.05_Windows_x64\mediainfo.exe" "C:\n8n-tools\test_file.mkv""
使用 2 個雙引號不起作用,無法被識別為指令
'""C:\MediaInfo_CLI_26.05_Windows_x64\MediaInfo.exe" "test.mkv""' is not recognized as an internal or external command, operable program or batch file.
請試試這個確切的命令。
"C:\MediaInfo_CLI_26.05_Windows_x64\MediaInfo.exe" "C:\Users\Administrator\Desktop\Anime\Upload\[Gecko] Muzik Tiger In the Forest [2025, TVER.WEB-DL 1080P]\[Gecko] Muzik Tiger In the Forest - S01E01 [TVER.WEB-DL 1080P AVC, AAC][D41B8A37].mkv"
如果輸出仍然是空的,這表示 MediaInfo 在能夠列印任何內容之前就當機了。若要查看「隱藏」的當機報告,請在末尾加上 2>&1。這會強制錯誤出現在輸出中:
"C:\MediaInfo_CLI_26.05_Windows_x64\MediaInfo.exe" "C:\Users\Administrator\Desktop\Anime\Upload\[Gecko] Muzik Tiger In the Forest [2025, TVER.WEB-DL 1080P]\[Gecko] Muzik Tiger In the Forest - S01E01 [TVER.WEB-DL 1080P AVC, AAC][D41B8A37].mkv" 2>&1
既然你已經在 CLI 建構上,即使檔案重導向也會輸出空結果,那麼該命令絕對是在執行 — MediaInfo 本身沒有產生任何輸出。這個執行緒中還有兩件事未被檢查過:
1. 查看 Execute Command 節點輸出中的 exitCode 欄位(它與 stdout/stderr 一起返回)。這個數字將問題一分為二:0 表示 MediaInfo「成功」執行且確實沒有列印任何內容,非零值表示它在產生輸出之前就失敗了。
2. 你的測試檔案位於 C:\Users\Administrator\Desktop。 這可以解釋 1.x → 2.x 的差異:如果你的 n8n 2.x 啟動方式與 1.x 不同(不同的使用者帳戶、服務、排程工作、不同的終端機工作階段),該程序可能根本無法讀取另一個帳戶的 Desktop 資料夾 — 而 MediaInfo 對無法讀取的輸入檔案保持沉默。快速測試:將影片複製到 C:\n8n-tools\(你已經知道 n8n 可以存取該位置,因為 dir 在那裡有效),然後針對該副本執行 MediaInfo。
以及一個 30 秒的隔離測試,完全不需要輸入檔案:
"C:\MediaInfo_CLI_26.05_Windows_x64\MediaInfo.exe" --Version
在 Execute Command 節點內執行。如果版本字串返回,二進位檔案和 stdout 管道就沒有問題,問題是存取輸入檔案(第 2 點)。如果即使 --Version 在 n8n 內也是空的,但在你自己的 cmd 視窗中列印,那麼這是 n8n 執行所在的程序內容,而不是檔案。
還有一個值得知道的逃生艙口:MediaInfo 可以直接將其報告寫入檔案,完全繞過 stdout:
"C:\MediaInfo_CLI_26.05_Windows_x64\MediaInfo.exe" --Output=JSON --LogFile=C:\n8n-tools\report.json "C:\n8n-tools\your_video.mkv"
如果 report.json 獲得內容而 stdout 保持空的,你已經將其隔離到 stdout 擷取;如果它也是空的,MediaInfo 就沒有讀取該檔案。(--Output=JSON 還可以節省你稍後解析文字佈局的時間。)
結束代碼是 0,而 stdout 是空的。我不知道 Mediainfo 有內建日誌記錄功能,它可以將輸出保存到文件中。基本上 "C:\MediaInfo_CLI_26.05_Windows_x64\MediaInfo.exe" --Output=JSON --LogFile=C:\n8n-tools\report.json "C:\n8n-tools\your_video.mkv" 完成了這項工作,只是 stdout 仍然是空的,但只要它保存到 json 文件,我稍後就可以解析它。
很高興 --LogFile 路由為你解除了阻礙,感謝你主動回報確切的結果——「exitCode 0 但 stdout 仍為空」對下一個遇到此問題的人來說是很寶貴的細節。由於 echo 和 dir 能運作,但外部 .exe 即使在成功時仍保持無聲,這看起來確實像是 2.x 版本中 Execute Command 在 Windows 上捕獲子進程輸出方式的一個改變——值得考慮提交為 bug 報告,這樣才能在上游得到修復。祝你自動化進行順利!