![](/img/trans.png)
[英]Pass multiple list of parameters from python to java program and get back return code using subprocess.communicate
[英]Python - communicate with subprocess
我在Win32操作系統上運行Python 2.7,但我希望編寫與平台無關的代碼。 我正在嘗試使用Python與我編寫的Java程序實時交互,並且想象管道將是最好的方法。 我的Python腳本將Java作為子進程調用。 從本質上講,Java是GUI,Python是后端。 (我不想使用Jython或wxPython,因為我只想依賴於每種語言提供的標准庫。)嘗試在兩者之間建立通信非常糟糕。 我可以使用(父)Python腳本向(子)Java類發送消息
process.stdin.write(msg)
process.stdin.flush()
但閱讀Java的輸出並沒有奏效。 我用
process.stdout.read()
但顯然,如果沒有什么可讀的,這將永遠封鎖。 並且process.communicate()
不受限制,因為在子process.communicate()
終止之前它不會執行任何操作。 根據我的研究,人們用來解決這個問題的一個常用方法是“使用線程”(盡管有人建議在編寫時附加換行符 - 不起作用),但是對於Python和線程新手來說我沒有想法看起來如何。 我試過查看標准庫的subprocess.py
源代碼,但這沒有幫助。 有沒有辦法看到stdout是否為空,至少? 如果沒有,我該如何做到這一點?
process.stdout.read()
但顯然,如果沒有什么可讀的,這將永遠封鎖。
好吧,不完全是,它會基本阻塞,而它的讀取/等待直到它達到文件關閉時設置的EOF
,繞過這一點的一種方法是說明要讀取多少字節process.stdout.read(1)
this將讀取1個字節並返回如果沒有字節然后再次它將等待至少一個字節或EOF
。
你也可以使用python select
module,它有一個可選的超時周期,select選擇等待這個long或者只返回空值http://docs.python.org/library/select.html
雖然它可能不完全支持在Windows上。
(雖然有人建議在寫作時添加換行符 - 但不起作用)
我實際上是從/到python,再加上process.stdout.readline().rstrip()
所以數據是一組行雖然你仍然要剝離它們,但是你可能需要刷新為了使兩個進程都注冊數據。
我確實找到了這個java:如何通過管道(stdin / stdout)讀取和寫入流程(stdin / stdout) ,這可能對你有幫助。
祝好運。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.