簡體   English   中英

運行subprocess.call以運行可可命令行應用程序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM