Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.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子进程异常处理 我有一个用C++编写的程序,它只做1/0个除法,产生一个异常。_Python_C++_Exception_Visual Studio 2012_Subprocess - Fatal编程技术网

Python子进程异常处理 我有一个用C++编写的程序,它只做1/0个除法,产生一个异常。

Python子进程异常处理 我有一个用C++编写的程序,它只做1/0个除法,产生一个异常。,python,c++,exception,visual-studio-2012,subprocess,Python,C++,Exception,Visual Studio 2012,Subprocess,我通过Python的子进程库运行这个程序的.exe。我的目标是捕获并记录C++程序所做的异常,在Python中。 p = subprocess.Popen(['C:\\Users\\name\\Desktop\\Win32Project1.exe']) 当这行代码执行时,p是非零值,表示发生了错误。 我运行的是windows 7,使用的是Python 3.4.1,我很确定您无法跟踪来自不同进程的异常。 您应该尝试在C++程序中捕获异常并通过许多进程间通信手段之一来传递异常。 嗯,, Cabbi

我通过Python的子进程库运行这个程序的.exe。我的目标是捕获并记录C++程序所做的异常,在Python中。
p = subprocess.Popen(['C:\\Users\\name\\Desktop\\Win32Project1.exe'])
当这行代码执行时,p是非零值,表示发生了错误。
我运行的是windows 7,使用的是Python 3.4.1,我很确定您无法跟踪来自不同进程的异常。 您应该尝试在C++程序中捕获异常并通过许多进程间通信手段之一来传递异常。 嗯,, Cabbi

试试这个

cmd = ['C:\\Users\\name\\Desktop\\Win32Project1.exe']
out, err = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
print out  # this prints the output of the execution
print err  # this prints if any error is returned

我没有windows,因此这没有经过测试,但可能会对您有所帮助,有关更多信息,请查看

您还可以将其他参数传递给subprocess.Popen,以指定stdin和stderr的位置

然后你可以说一些类似的话:

p = subprocess.Popen('C:\\Users\\name\\Desktop\\Win32Project1.exe', stdout=PIPE, stderr=PIPE)
(stdout_data, stderr_data) = p.communicate()

rc = p.returncode

# assume 0 return code means o.k.
if rc:
  parse_error(stderr_data)
  # end if

根据需要的控制量,需要处理stdout和stderr管道+wait()以获得返回值。也许这项工作是为你做的?当这行代码执行时,p是一个非零值,表示发生了错误-不,不是这样的
subprocess.Popen
返回一个从不为零的Popen对象。您可以调用
p.wait()
并获取返回代码,如果您愿意的话。当我使用windbg运行该进程时,它会跟踪异常并记录错误,所以这一定是可能的,是吗?在我的情况下,通过C++代码修改它不是一个选项。您可以使用Python与平台的调试工具进行交互。我搜索了一下,得到了一些有趣的答案,比如。但对@cabbi公平地说,您在这里没有提到您正在尝试编写一个调试器,这有点让他目瞪口呆。对于大多数用户来说,您不会试图从其他程序中获取异常。我找到的最好的解决方案(我没有测试它)是在新的应用程序域中启动该过程。这里有一个C#中的例子:@tdelaney winappdbg最终解决了我的问题,谢谢!