是否可以执行以下操作?
打开一个新的cmd.exe
或terminal
(在MacOS / Linux上)窗口
传递/运行命令,例如cd <path>
我可以通过运行此命令打开cmd:
"$electron.shell.openItem('cmd.exe')"
但是shell.openItem
不允许传递参数/命令。
我尝试使用child_process
,但我根本无法使用它,它没有打开新的终端窗口:
const { spawn, exec } = require('child_process');
spawn('C:/Windows/System32/cmd.exe');
我也试过运行以下命令,但仍然没有:
spawn( 'cmd.exe', [ '/c', 'echo ASDASD' ], { stdio: [0, 1, 2] } )
我看到唯一可行的解决方案是创建command.bat
:
start cmd.exe /K "cd /D C:\test"
然后使用openItem
:
"$electron.shell.openItem('command.bat')"
但这只适用于Windows
答案 0 :(得分:2)
我终于在Windows上找到了一种方法:
var child_process = require('child_process');
child_process.exec("start cmd.exe /K cd /D C:/test");
start
才能打开新的命令窗口cd /D C:/test
,例如python
/D
是为了确保它会自动更改当前的驱动器,具体取决于指定的路径
/K
删除了初始消息
不要使用execSync
它会锁定应用程序直到终端(命令
提示)窗口已关闭
至于MacOS,看起来可能与osascript
osascript -e 'tell application "Terminal" to activate' -e 'tell application "System Events" to tell process "Terminal" to keystroke "t" using command down'
答案 1 :(得分:1)
这是一个工作示例,展示如何从macOS
在渲染器脚本上打开特定路径(例如〜/ Desktop)的终端窗口:
const { app } = require ('electron').remote;
const atPath = app.getPath ('desktop');
const { spawn } = require ('child_process');
let openTerminalAtPath = spawn ('open', [ '-a', 'Terminal', atPath ]);
openTerminalAtPath.on ('error', (err) => { console.log (err); });
应该很容易使它适应任何选定的atPath ...... 至于运行其他命令,我还没找到方法......
以下是Linux Mint Cinnamon
或Ubuntu
的等效工作代码:
const { app } = require ('electron').remote;
const terminal = 'gnome-terminal';
const atPath = app.getPath ('desktop');
const { spawn } = require ('child_process');
let openTerminalAtPath = spawn (terminal, { cwd: atPath });
openTerminalAtPath.on ('error', (err) => { console.log (err); });
请注意,终端应用程序的名称可能会有所不同,具体取决于Linux风格(例如'mate-terminal'
上的Linux Mint MATE
),以及可以显式定义应用程序的完整路径,为了安全起见:
const terminal = '/usr/bin/gnome-terminal';
... HTH