Python 子进程不接受dxl脚本的输出
我正在使用Python的子流程模块运行dxl脚本。我的问题是,当我尝试捕获dxl脚本的输出(在本例中为打印语句或错误消息)时,它会显示在命令提示符中,但当我尝试使用Python 子进程不接受dxl脚本的输出,python,subprocess,ibm-doors,Python,Subprocess,Ibm Doors,我正在使用Python的子流程模块运行dxl脚本。我的问题是,当我尝试捕获dxl脚本的输出(在本例中为打印语句或错误消息)时,它会显示在命令提示符中,但当我尝试使用stdout=subprocess.PIPE或subprocess.check\u Output捕获它时,它总是返回空字符串。是否有方法捕获输出,或者如何从Doors获取错误消息? 重要的是不要看到DOORS的GUI 下面是我的快速示例,它显示了我的问题: test.dxl print "Hello World" test.py i
stdout=subprocess.PIPE
或subprocess.check\u Output
捕获它时,它总是返回空字符串。是否有方法捕获输出,或者如何从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)
编辑:使用Windows7、DOORS9.5和Python2.7,您的脚本有很多错误,请尝试将其用于子流程 试试这个:
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()
我希望它能在你的系统上工作 您的脚本有许多错误,请尝试此操作,例如子流程 试试这个:
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()
我希望它能在你的系统上工作 我知道这篇文章很老,但解决问题的办法是使用
我知道这篇文章很老了,但解决问题的办法是使用
我在这里感到很幸运
将“Hello World”改为“cout”我在这里感到很幸运
将
打印“Hello World”
更改为cout如果在Windows控制台中运行相同的命令但带有重定向(在命令末尾追加>output.txt
),会发生什么情况?你在文件中看到结果了吗?无关:在Windows路径中使用原始字符串文字,如r'C:\Program..'
(以避免逃逸反斜杠)。感谢原始字符串tipp,我明天回来工作时将在Windows控制台上试用。@J.F.Sebastian,因此我尝试了它,它创建了一个带有“Hello World”的命令提示符消息和一个空的output.txt文件:(如果doors.exe
,则查看是否有命令行开关将输出重定向到更易访问的位置(例如文件),否则您可能需要模拟Windows控制台(UNIX上有伪tty,但Windows上完全不同).More解决了将数据打印到文件并用python读取的问题。但nontheless解决了这个问题,因此非常感谢@J.F.Sebastian:)如果在Windows控制台中运行相同的命令,但带有重定向(在命令末尾追加>output.txt
),会发生什么?你在文件中看到结果了吗?无关:在Windows路径中使用原始字符串文字,如r'C:\Program..'
(以避免逃逸反斜杠)。感谢原始字符串tipp,我明天回来工作时将在Windows控制台上试用。@J.F.Sebastian,因此我尝试了它,它创建了一个带有“Hello World”的命令提示符消息和一个空的output.txt文件:(如果doors.exe
,则查看是否有命令行开关将输出重定向到更易访问的位置(例如文件),否则您可能需要模拟Windows控制台(UNIX上有伪tty,但Windows上完全不同).More解决了将数据打印到文件并用python读取的问题。但nontheless解决了这个问题,因此非常感谢@J.F.Sebastian:)您对几个与子流程相关的问题给出了几乎相同的错误答案。(1) 不要使用sys.executable
,除非您希望使用与父Python脚本相同的Python解释器来运行子Python脚本(doors.exe
看起来不太像)(2)为什么您认为stdin=PIPE
(重定向标准输入)与问题有关?OP希望从子流程获取输出——您的代码不会尝试捕获输出。(3) 我不明白你为什么把path
放进userInfo
@Najeeb Choudhary这个答案一点帮助都没有。如果我的脚本中有这么多错误,你能发布一个解决方案吗?@TooBroke我想知道door.exe是什么。什么样的节目?您可以使用DOORS扩展语言(dxl)访问DOORS的数据,而无需启动GUI。我就是这么做的。为了更容易地在dxl脚本中显示我的问题,我只写了打印“Hello World”
。您对几个与子流程相关的问题给出了几乎相同的错误答案。(1) 不要使用sys.executable
,除非您希望使用与父Python脚本相同的Python解释器来运行子Python脚本(doors.exe
看起来不太像)(2)为什么您认为stdin=PIPE
(重定向标准输入)与问题有关?OP希望从子流程获取输出——您的代码不会尝试捕获输出。(3) 我不明白你为什么把path
放进userInfo
@Najeeb Choudhary这个答案一点帮助都没有。如果我的脚本中有这么多错误,你能发布一个解决方案吗?@TooBroke我想知道door.exe是什么。什么样的节目?您可以使用DOORS扩展语言(dxl)访问DOORS的数据,而无需启动GUI。我就是这么做的。为了更容易地在dxl脚本中显示我的问题,只需打印“Hello World”
即可。