运行subprocess.call来运行Cocoa命令行应用程序
我有一段Cocoa代码,我写了一个包含边界框的XML文件,然后在视频顶部绘制边界框(每个框都有一个关联的框架) 。 Cocoa程序旨在从命令行运行(并将其所有参数作为命令行参数)运行subprocess.call来运行Cocoa命令行应用程序
我可以在任何XML文档中运行程序。但是,当我尝试从Python脚本中运行程序时遇到了问题。例如:
with file("test.xml") as temp:
temp.write(doc.toprettyxml())
# cval is my cocoa program to call, the other arguments are given to the Python script and parsed with optparser
command = ["./cval", "-o", options.output, "-i", str(options.interval), "-s", "%dx%d" % (options.width, options.height), "-f", str(options.frames), "-x", temp.name]
subprocess.call(command)
有时,这会导致我的“CVAL”失败,其他时间不是(改变XML文档中的一个数字可以改变它的行为)。我还可以在尝试读取不在那里的XML元素时验证它是否中断。只有,我可以打开'test.xml',并验证元素确实存在。但是,如果我用'test.xml'自己运行'cval'(在Python脚本之外),它可以正常工作。这让我相信当我执行'subprocess.call'时会发生奇怪的事情,但我不确定它会是什么。我有其他Cocoa/Python混合,它们完成不同的任务(即不使用XML),这些任务也会任意展现奇怪的行为,但本质上更复杂。
我希望有人也可能遇到这个问题,或者可能知道下一步调试这个怪事。
因为代码最初使用的是临时文件,所以在将它传递给子进程之前,我无法关闭该文件。但是,我应该做的是在调用subprocess.call之前刷新文件。不一致的行为可能是由于输入大小造成不同阈值的自动冲洗。
的代码应阅读:
with file("test.xml") as temp:
temp.write(doc.toprettyxml())
temp.flush()
command = ["./cval", "-o", options.output, "-i", str(options.interval), "-s", "%dx%d" % (options.width, options.height), "-f", str(options.frames), "-x", temp.name]
subprocess.call(command)
也许尝试在那里放置一个“打印命令”语句,当返回代码subprocess.call
表示一个错误。失败时,查看子进程执行的内容和命令行可能执行的内容是否有区别。此外,请尝试调用subprocess.call(command, shell=True)
,以便您的命令在shell中执行(使用字符串格式等)。
如果我打印出命令,我会得到: ['./cval','-o','valtest.mp4','-i','0.1','-s','800x600','-f ','60','-x','valtest.xml']' 如果我在命令行上运行等效命令,它可以正常工作: ./cval -o valtest.mp4 -i 0.1 -s 800x600 -f 60 -x valtest.xml 我尝试使用'shell = True',并且得到错误。 – 2010-07-19 21:38:10
你是否收到任何具体的错误信息?您可以使用'subprocess.check_output'执行程序,在失败时捕获'CalledProcessError'异常('e'),然后打印'e.output'来查看可能出错的地方。 – ars 2010-07-19 22:01:40
我收到一个错误,但如上所述,它来自我的Cocoa程序。以某种方式运行Cocoa程序表单subprocess.call导致其行为与从命令行调用时完全相同的输入不同。在这种特殊情况下,Cocoa程序正在读取的XML文件(未在命令行中传递)似乎没有正确解析。 – 2010-07-19 23:50:25
什么错误信息你好吗? – 2010-07-20 09:02:29