Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 子进程不接受dxl脚本的输出_Python_Subprocess_Ibm Doors - Fatal编程技术网

Python 子进程不接受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

我正在使用Python的子流程模块运行dxl脚本。我的问题是,当我尝试捕获dxl脚本的输出(在本例中为打印语句或错误消息)时,它会显示在命令提示符中,但当我尝试使用
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”
即可。