Command line 在SWI Prolog中使用命令提示符或shell使用进程\u create/3时出错

Command line 在SWI Prolog中使用命令提示符或shell使用进程\u create/3时出错,command-line,windows-7,prolog,swi-prolog,createprocess,Command Line,Windows 7,Prolog,Swi Prolog,Createprocess,在Windows 7上,当我在SWI Prolog中使用process_create/3打开Notepad.exe之类的应用程序时,记事本会打开。但是,它不适用于使用命令提示符的应用程序。例如,当我尝试打开命令提示符窗口时,使用: main :- process_create('C:\\WINDOWS\\system32\\cmd.exe',[] ,[]). 这给了我们一个 ERROR: Process "c:\windows\system32\cmd.exe": exit status: 1

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

main :- process_create('C:\\WINDOWS\\system32\\cmd.exe',[] ,[]).
这给了我们一个

ERROR: Process "c:\windows\system32\cmd.exe": exit status: 1
类似地,当尝试打开powershell.exe时,它也不起作用。控制台只是挂起,没有显示错误


非常感谢您的帮助。

要启动单独的控制台窗口:

?- process_create(path(cmd), ['/c', 'start', 'cmd'], []).
甚至更短(但我不知道这有多便携):

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

要使用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“

是否需要启动应用程序,以便开始使用它而不是当前运行的Prolog程序?在没有附加参数的情况下,
process\u create/3
用于运行一次非交互式程序。如果您想切换焦点,您可能需要仔细阅读所有可以传递到
process\u create/3
的选项。从我的Prolog代码中,我尝试启动一个.bat应用程序,它启动命令提示符窗口并开始在其中运行。您需要向它传递参数。现在我可以使用
win_exec/2
从我的代码运行应用程序,它也可以运行(包括向它传递参数)。但是我想使用
process\u create/3
运行它,通过在
Args
列表中传递参数来传递参数,如文档中所述。但是,它不起作用。所以我试着打开Notepad.exe和cmd.exe,看看它是如何工作的,如上所述。你知道怎么做吗?谢谢。目前您最好使用
win\u exec/2
。我不使用Windows,因此我能为您提供的最好帮助是比您更仔细地阅读文档;)但是对于Windows来说,
process\u create/3
似乎不如
win\u exec/2
有用。不过别相信我的话。
?- getenv('COMSPEC', CMD), process_create(CMD, ['/c', 'start'], []).
?- process_create(
    path(cmd), 
    ['/c', 'start', 'cmd', '/c', 'c:\\test\\test.bat', 'arg1', 'arg2', 'arg3'],
    []).