![](/img/trans.png)
[英]cannot correctly use “psql” command-line via subprocess.call in my script
[英]Running subprocess.call to run a Cocoa command-line application
我编写了一段可可代码,其中包含一个XML文件,其中包含边界框,然后将边界框绘制在视频的顶部(每个框都有一个关联的框架)。 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”自己(在Python脚本之外)运行“ cval”,则效果很好。 这使我相信,当我执行“ 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中一样被执行(使用字符串格式等)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.