我想用subprocess.call在Python中運行外部應用程序。從我讀過的內容來看,subprocess.call不應該被阻塞,除非你調用Popen.wait,但是對於我來說它會阻塞,直到外部應用程序退出。我該如何解決?Python子進程調用阻塞
7
A
回答
-1
subprocess
中的代碼實際上非常簡單易讀。只要看到3.3或2.7版本(視情況而定),你就可以知道它在做什麼。
例如,call
看起來是這樣的:
def call(*popenargs, timeout=None, **kwargs):
"""Run command with arguments. Wait for command to complete or
timeout, then return the returncode attribute.
The arguments are the same as for the Popen constructor. Example:
retcode = call(["ls", "-l"])
"""
with Popen(*popenargs, **kwargs) as p:
try:
return p.wait(timeout=timeout)
except:
p.kill()
p.wait()
raise
你可以做同樣的事情,而不調用wait
。創建一個Popen
,不要打電話給wait
,這正是你想要的。
5
您正在閱讀錯誤的文檔。根據他們:
subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)
運行由args描述的命令。等待命令完成,然後返回returncode屬性。
+0
哦,好的。如何複製使用選項P_NOWAIT調用os.spawnl的功能? – dpitch40
+1
@ dpitch40 - http://docs.python.org/2/library/subprocess.html#replacing-the-os-spawn-family。 –
相關問題
- 1. 阻塞和不阻塞子進程調用
- 2. 在Python中阻塞子進程函數?
- 3. Python線程阻塞進一步執行
- 4. 非阻塞等待子進程退出
- 5. python中的非阻塞子流程
- 6. SOAP遠程過程調用原子阻塞調用嗎?
- 7. 在進程中調用阻塞多進程pool.map
- 8. 在Python中收集子進程輸出非阻塞
- 9. Python的子進程阻塞並獲得BadStatusLine例外
- 10. 從多個子進程中讀取非阻塞(Python)
- 11. 單進程阻塞隊列
- 12. Delegate.BeginInvoke回調阻塞調用線程?
- 13. WCF阻塞調用
- 14. python .select阻塞
- 15. Django非阻塞電子郵件?線程下線或子進程?
- 16. 阻止阻塞的線程阻塞
- 17. 非阻塞PASV襪子和阻塞
- 18. 如何在Linux中顯示進程狀態(阻塞,非阻塞)
- 19. Python:非阻塞+未解除阻塞的過程
- 20. Python子進程調用rsync
- 21. python子進程調用
- 22. GKSession調用是否阻塞主線程?
- 23. 阻塞線程的調用方法
- 24. OpenMP阻塞線程中的調用
- 25. 遠程執行非阻塞進程
- 26. 哪些POSIX系統調用可能會阻塞進程?
- 27. 的Python:非阻塞從螺紋子
- 28. Python smtplib Tmobile阻塞
- 29. 進程阻塞如何應用於多線程進程?
- 30. 查找阻塞調用
有幫助,但居高臨下。 – dpitch40