【问题标题】:Subprocess wont take the output of dxl script子进程不会获取 dxl 脚本的输出
【发布时间】:2015-10-07 13:42:24
【问题描述】:

我正在使用 Python 的 subprocess 模块来运行 dxl 脚本。我的问题是当我尝试捕获我的 dxl 脚本的输出(在此示例中为打印语句或错误消息)时,它显示在命令提示符中,但是当我尝试使用 stdout=subprocess.PIPE 或 @987654323 捕获它时@ 它总是返回一个空字符串。有没有办法捕获输出或者我如何从 Doors 获取错误消息? 重要的是不要看到 DOORS 的 GUI。

这是我的问题的简单示例:

test.dxl

print "Hello World"

test.py

import subprocess
doorsPath = "C:\\Program Files (x86)\\IBM\\Rational\\DOORS\\9.5\\bin\\doors.exe"
userInfo = ' -user dude -password 1234 -d 127.0.0.1 -batch ".\\test.dxl"'
dxl = " -W"

output = subprocess.check_output(doorsPath+dxl+userInfo)
print(output)

编辑:使用 Windows 7、DOORS 9.5 和 Python 2.7

【问题讨论】:

  • 如果您在 Windows 控制台中运行相同的命令但使用重定向(在命令末尾附加 > output.txt)会发生什么?你在文件中看到结果了吗?不相关:对 Windows 路径使用原始字符串文字,例如 r'C:\Program..'(以避免转义反斜杠)。
  • 感谢原始字符串提示,明天我回来工作时会在 Windows 控制台上试用它。
  • @J.F.Sebastian 所以我试了一下,它创建了一个带有“Hello World”消息的命令提示符和一个空的 output.txt 文件:(
  • 如果doors.exe prints directly to Windows console outside its stdout, stderr 然后看看是否有一个命令行开关可以将输出重定向到更容易访问的地方(比如文件),否则你可能需要模拟Windows控制台(有伪-tty 在 UNIX 上,但在 Windows 上完全不同)。
  • More 解决了将数据打印到文件并使用 python 读取的问题。但仍然解决了它,非常感谢@J.F.Sebastian :)

标签: python subprocess ibm-doors


【解决方案1】:

我知道这篇文章很旧,但问题的解决方案是使用 cout DOORS Print Redirect Tutorial for print, cout and logfiles

【讨论】:

    【解决方案2】:

    我在这里感觉很幸运,

    将print "Hello World" 更改为cout << "Hello World"

    和userInfo = ' -user dude -password 1234 -d 127.0.0.1 -batch ".\\test.dxl > D:\output.txt"'一样,在cmd promt中文本可以直接导出到文本文件中。

    【讨论】:

      【解决方案3】:

      你的脚本有很多错误试试这个link,例如子进程

      试试这个:

      import subprocess
      import sys
      
      path = "C:\\Program Files(x86)\\IBM\\Rational\\DOORS\\9.5\\bin\\doors.exe"
      userInfo = "C:\\Program Files (x86)\\IBM\\Rational\\DOORS\\9.5\\bin\\doors.exe"
      
      proc = subprocess.Popen([path,userInfo,"-W"])
      proc.communicate()
      

      我希望它可以在您的系统上运行!

      【讨论】:

      • 您对几个与subprocess 相关的问题发布了几乎相同的错误答案。 (1) 不要使用sys.executable,除非您想使用与父 Python 脚本相同的 Python 解释器运行子 Python 脚本(doors.exe 看起来不像)(2)您为什么认为 @987654327 @(重定向标准输入)与问题中的问题有什么关系? OP 希望从子进程中获取输出——您的代码不会尝试捕获输出。 (3) 我不明白你为什么把path 变成userInfo
      • @Najeeb Choudhary 这个答案根本没有帮助。如果我的脚本中有这么多错误,您可以发布解决方案吗?
      • @TooBroke 我知道什么是door.exe。什么样的程序?
      • DOORS(Wikipedia) 您可以在不启动 GUI 的情况下使用 Doors eXtension Language (dxl) 访问 DOORS 的数据。这就是我在做什么。为了更容易在 dxl 脚本中显示我的问题,只写了print "Hello World"。
      猜你喜欢
      • 2015-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-08
      • 1970-01-01
      • 2015-12-07
      • 1970-01-01
      • 2016-11-17
      相关资源
      最近更新 更多