为什么 Python 子进程 return 代码在 运行 Modelsim 可执行文件时始终为 0?

Why is Python subprocess return code always 0 when running Modelsim Executable?

我正在使用 python 的子进程来启动 modelsim 可执行文件。在 CLI 中,我输入 quit -f -code<-5>。这应该以退出代码 -5 退出 modelsim。我尝试了多个不同的子流程,例如 call/run/check_call/checkoutput,但它们都 return 0 就好像它成功了 运行。如果 modelsim 以非零退出代码退出,子进程不应该是 returning 非零 return 代码并引发 CalledProcessError?

例如:
python example.py 在 CLI 中
status = subprocess.call([r"C:\...\...\vsim.exe", "-c", "-do"]) 在 python 脚本中
quit -f -code<non-zero integer> 在 CLI 中

而不是退出尝试 "exit -f -code 5"。

注意 Modelsim 使用 1 到 231 作为它们自己的错误消息,所以我会使用 256 以上的数字。

补充:退出和退出对我来说似乎都可以,可能是版本问题?我使用了 Modelsim 2019.4 和 Python 3.7.1。这是我使用的代码:

Python代码:

` 导入系统
导入子流程

def main(argv):
    status = subprocess.call([r"vsim.exe", "-c", "-do", "run.do"])
    print("vsim returned",status)    
    sys.exit(status)

if __name__ == '__main__':    
    main(sys.argv[1:])`

run.do 文件:

vsim top run 1 us quit -f -code 34

CMD批处理文件:

python callvsim.py @echo Python returned %ERRORLEVEL%

并且输出:

Errors: 0, Warnings: 0 vsim returned 34 Python returned 34

祝你好运,

汉斯

www.ht-lab.com