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

标签 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

同样,当尝试打开 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/

相关文章:

bash - 如何使用 bash 执行任何编辑其文件(参数) "in place"的命令?

git - 在没有 Git 本身的情况下安装 Git-TFS

c# - Windows XP 上出现PrincipalServerDownException,但 Windows 7 上没有

prolog - 在序言中的真实答案后不停止

prolog - 序言中的保护条款?

c++ - 提升程序选项 : does custom validator require overloading operator>>?

mysql - 是否可以在 mysql 中使用 "Index"作为列名

c++ - 从命令行创建 Intellisense 数据库?

testing - 如何仅用一台计算机测试网络应用程序?

string - 标准化 Prolog 原子中的空格字符