NodeJS 子进程用省略号截断输出字符串
NodeJS Child Process truncate output string with ellipsis
我目前正在使用 Electron 开发应用程序。
此应用程序执行的操作之一是“验证版本”TeamSpeak 3 客户端插件。
为此,我 运行 一个检查插件文件的 SHA256 散列的命令,并将其与另一个字符串进行比较。
powershell.exe Get-FileHash $env:APPDATA\TS3Client\plugins\tokovoip_win32.dll
我 运行 tokovoip_win64.dll
的相同命令。这对大多数人都有效。但是,对于我的应用程序的一位用户,它中断了。
运行在命令上使用正则表达式后
const win32ActualHash = /SHA256\s+?(\S+?)\s/gm.exec(await child.execSync(
'powershell.exe Get-FileHash $env:APPDATA\TS3Client\plugins\tokovoip_win32.dll'))[1];
const win64ActualHash = /SHA256\s+?(\S+?)\s/gm.exec(await child.execSync(
'powershell.exe Get-FileHash $env:APPDATA\TS3Client\plugins\tokovoip_win64.dll'))[1];
预期输出是
win32ActualHash = 'DDCF282FDC439DE4E560F74231B22850EB7016573730A0CD94B08AAEECDEC167';
win64ActualHash = 'AA38ED69966741C4D68E964F05CB16351EC5700E337D953B07DB81D7FB3891C7';
但是,该用户得到的输出是
win32ActualHash = 'DDCF282FDC439DE4E560F74231B22850EB7016573730A0CD94B08AAEECDE...';
win64ActualHash = 'AA38ED69966741C4D68E964F05CB16351EC5700E337D953B07DB81D7FB38...';
我用于测试解决方案的设置非常有限,因为我无法重新创建此场景,而且我不想向该用户发送可能的修复程序垃圾邮件。
是什么导致这些字符串被处理运行,我怎样才能防止这种情况发生?
我通过在 powershell 命令中将其输送到 Format-List
中设法解决了这个问题:
powershell.exe "Get-FileHash $env:APPDATA\TS3Client\plugins\tokovoip_win32.dll | Format-List"
然后更改 RegExp 以提取哈希
const win32ActualHash = /Hash\s*?:\s*(\S*)\s*/gm.exec(await child.execSync(
'powershell.exe "Get-FileHash $env:APPDATA\TS3Client\plugins\tokovoip_win32.dll | Format-List"'))[1];
const win64ActualHash = /Hash\s*?:\s*(\S*)\s*/gm.exec(await child.execSync(
'powershell.exe "Get-FileHash $env:APPDATA\TS3Client\plugins\tokovoip_win64.dll | Format-List"'))[1];
Format-List
似乎从不截断字符串,因此提供一致的输出
我目前正在使用 Electron 开发应用程序。 此应用程序执行的操作之一是“验证版本”TeamSpeak 3 客户端插件。 为此,我 运行 一个检查插件文件的 SHA256 散列的命令,并将其与另一个字符串进行比较。
powershell.exe Get-FileHash $env:APPDATA\TS3Client\plugins\tokovoip_win32.dll
我 运行 tokovoip_win64.dll
的相同命令。这对大多数人都有效。但是,对于我的应用程序的一位用户,它中断了。
运行在命令上使用正则表达式后
const win32ActualHash = /SHA256\s+?(\S+?)\s/gm.exec(await child.execSync(
'powershell.exe Get-FileHash $env:APPDATA\TS3Client\plugins\tokovoip_win32.dll'))[1];
const win64ActualHash = /SHA256\s+?(\S+?)\s/gm.exec(await child.execSync(
'powershell.exe Get-FileHash $env:APPDATA\TS3Client\plugins\tokovoip_win64.dll'))[1];
预期输出是
win32ActualHash = 'DDCF282FDC439DE4E560F74231B22850EB7016573730A0CD94B08AAEECDEC167';
win64ActualHash = 'AA38ED69966741C4D68E964F05CB16351EC5700E337D953B07DB81D7FB3891C7';
但是,该用户得到的输出是
win32ActualHash = 'DDCF282FDC439DE4E560F74231B22850EB7016573730A0CD94B08AAEECDE...';
win64ActualHash = 'AA38ED69966741C4D68E964F05CB16351EC5700E337D953B07DB81D7FB38...';
我用于测试解决方案的设置非常有限,因为我无法重新创建此场景,而且我不想向该用户发送可能的修复程序垃圾邮件。
是什么导致这些字符串被处理运行,我怎样才能防止这种情况发生?
我通过在 powershell 命令中将其输送到 Format-List
中设法解决了这个问题:
powershell.exe "Get-FileHash $env:APPDATA\TS3Client\plugins\tokovoip_win32.dll | Format-List"
然后更改 RegExp 以提取哈希
const win32ActualHash = /Hash\s*?:\s*(\S*)\s*/gm.exec(await child.execSync(
'powershell.exe "Get-FileHash $env:APPDATA\TS3Client\plugins\tokovoip_win32.dll | Format-List"'))[1];
const win64ActualHash = /Hash\s*?:\s*(\S*)\s*/gm.exec(await child.execSync(
'powershell.exe "Get-FileHash $env:APPDATA\TS3Client\plugins\tokovoip_win64.dll | Format-List"'))[1];
Format-List
似乎从不截断字符串,因此提供一致的输出