Python 2.4.6子流程让我困惑

Python 2.4.6子流程让我困惑,python,subprocess,Python,Subprocess,我编写了一个很好的python脚本,它解析XML并添加一些复杂的逻辑,然后通过子流程模块与外部命令交互 大多数subprocess.Popen调用完全按照它们应该执行的操作,但最后一个调用只是拒绝执行。没有错误消息,它只是没有做它应该做的。我甚至将实际的CMD放入一个由调试语句包围的shell脚本中,shell脚本得到执行,但实际的CMD没有执行 更令人恼火的是,单独的.py文件中的同一行代码执行得很好 我不知道为什么会这样,怎么会这样 python代码正在生成一个文件,并尝试使用选项调用外部命

我编写了一个很好的python脚本,它解析XML并添加一些复杂的逻辑,然后通过子流程模块与外部命令交互

大多数subprocess.Popen调用完全按照它们应该执行的操作,但最后一个调用只是拒绝执行。没有错误消息,它只是没有做它应该做的。我甚至将实际的CMD放入一个由调试语句包围的shell脚本中,shell脚本得到执行,但实际的CMD没有执行

更令人恼火的是,单独的.py文件中的同一行代码执行得很好

我不知道为什么会这样,怎么会这样

python代码正在生成一个文件,并尝试使用选项调用外部命令

p = subprocess.Popen([CMD,'object','new_host','--file','/tmp/add.1234'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
r = p.communicate()
print r
此逻辑在独立文件中工作,但在较大的python脚本中不起作用(该脚本中有其他可用的Popen调用)

有人知道为什么会这样吗


PS:我无法将python更新到最新版本

您如何知道进程没有执行?如果从命令行运行包装器shell脚本,会发生什么?你预计会发生什么?你正在调用什么样的过程?它是否有一个返回码,您可以使用popen对象进行检查?似乎它可能在没有输出的情况下提前执行并失败。这是一个在系统上随软件堆栈而来的命令。我知道进程没有执行,因为它没有做它应该做的事情。它将在标准输出上输出它正在做的事情,而不输出任何东西。CMD本身就是一个shell脚本。如果该行在一个单独的.py文件中工作,我会立即在它周围的代码中查找问题。您是否查看了该脚本,对其他Popen调用进行了注释,以查看它是否会运行?对于这样的问题,如果有一个脚本可以工作,另一个脚本不能工作,那么慢慢地使它们越来越接近相同,直到它们以相同的方式运行,这通常是有用的。然后你可以确定它在做什么。