在 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'], []).
或者更短(但我不知道这有多便携):
?- 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“
。
关于command-line - 在 SWI Prolog 中使用命令提示符或使用 process_create/3 的 shell 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38144451/