HTMLHelp编译器可以完美地从命令行运行,但不能从脚本或批处理fi运行

2024-05-02 08:10:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从脚本运行windows帮助文件编译器(hhc.exe),但它显示了非常意外的行为。在

当我把它从命令行.exe使用hhc pathtohelpproject.hpp,帮助文件按预期编译。但是,使用相同的工作目录从python调用完全相同的命令会导致程序返回0而没有输出。在

但更奇怪的是:我创建了一个批处理文件runhhc.bat

hhc "pathtohelpproject.hpp"

我通过调用call runhhc.batstart runhhc.batrunhhc.bat从python脚本中运行。在

所有这些都导致了同样的行为。但是,使用start runhhc.bat时,hhc返回后cmd实例仍处于打开状态,因此我再次尝试手动输入命令,但没有成功。但是当我在一个新的、手动打开的命令中输入命令时,它也没有起作用!事实上,它只在我关闭脚本打开的命令后才开始工作。在

这种奇怪的行为有什么解释呢?如何从脚本运行编译器呢?在


Tags: 命令行命令目录脚本编译器windows手动exe
1条回答
网友
1楼 · 发布于 2024-05-02 08:10:38

完全取决于hhc.exe,没别的了。诀窍是在%ERRORLEVEL%运行后查看它。尽管成功,它仍返回“1”。这可以在自定义命令中使用,以警告用户它是假的,如果hhc.exe跑步和其他东西是隔离的。 HHC.exe正在使用HHA.dll. 关于HHA.dll信息尚未发布。微软将保密协议(NDA)下的HHA接口信息授予批准的帮助ISV

D:\_working>"C:\Program Files (x86)\HTML Help Workshop\hhc" foobar.hhp
Microsoft HTML Help Compiler 4.74.8702

Compiling d:\_working\foobar.chm

...

Compile time: 0 minutes, 1 second
22      Topics
87      Local links
2       Internet links
0       Graphics

Created d:\_working\foobar.chm, 305,338 bytes
Compression decreased file by 53,639 bytes.

D:\_working>echo %errorlevel%
1

要绕过这个问题并继续,您需要在批处理文件中添加if not %errorlevel% 1 exit /B 1。在

^{pr2}$

以及调用此批处理的python脚本:

print ("*******************************")
print ("We compile a CHM help file  ...")
print ("*******************************")
# First import the 'ctypes' module. ctypes module provides C compatible data types and allows calling functions in DLLs or shared libraries.
import ctypes  # An included library with Python install.
# ctypes.windll.user32.MessageBoxW(0, "Open CHM", "Your title", 1) # OK only
messageBox = ctypes.windll.user32.MessageBoxA
# documentation: https://msdn.microsoft.com/en-us/library/windows/desktop/ms645505(v=vs.85).aspx
returnValue = messageBox(None,"Compile Help Module (CHM) now?","CHM and Python",1) # 1=OK Cancel, 2=Cancel, Retry, Ignore

if returnValue == 1:
    print("Pressed OK")
    # How to compile a chm file in Python?
    #                 -
    import os   
    os.system("D:/_batch/run-hhc.bat")

elif returnValue == 2: 
    print("user pressed cancel button!")

enter image description here

您可能有兴趣从python脚本调用CHM:

# How to open a chm file in Python?
#                 -
# os.system("hh.exe D:/UserData-QGIS-Python/Projekte/ConnectChm/CHM-example.chm")
import os 
os.system("hh.exe D:/UserData-QGIS-Python/Projekte/ConnectChm/CHM-example.chm::/garden/garden.htm") 

相关问题 更多 >