在 SWI Prolog 中使用命令提示符或 shell 使用 process_create/3 时出错

Error while using command prompt or shell using process_create/3 in SWI Prolog

在Windows 7上,当我在SWI Prolog中使用process_create/3打开Notepad.exe这样的应用程序时,记事本打开了。但是,它不适用于使用命令提示符的应用程序。例如,当我尝试打开命令提示符 window 时,使用:

main :- process_create('C:\WINDOWS\system32\cmd.exe',[] ,[]).

这给出了

ERROR: Process "c:\windows\system32\cmd.exe": exit status: 1

同样,当试图打开powershell.exe时,它也不起作用。控制台只是挂起,没有显示错误。

非常感谢任何帮助。

启动一个单独的控制台window:

?- process_create(path(cmd), ['/c', 'start', 'cmd'], []).

甚至更短(但我不知道这有多便携):

?- process_create(path(cmd), ['/c', 'start'], []).

或者这样(取自 SWI-Prolog 源代码的想法):

?- getenv('COMSPEC', CMD), process_create(CMD, ['/c', 'start'], []).

要启动带有 3 个参数的外部 BAT 命令:

?- process_create(
    path(cmd), 
    ['/c', 'start', 'cmd', '/c', 'c:\test\test.bat', 'arg1', 'arg2', 'arg3'],
    []).

重要说明:理论上你可以将所有这些参数作为一个字符串传递,例如。 '/c start cmd ...' 而不是字符串列表,但在更复杂的情况下可能会发生奇怪的事情。在我的例子中,SWI-Prolog 7.2.3 在末尾添加了单引号或单双引号,因此传递给批处理脚本的最后一个参数不是 arg3 而是 arg3'arg3".