我想在一個線程內使用子進程模塊和Popen啓動'rsync'。在我調用rsync之後,我還需要讀取輸出。我正在使用通信方法來讀取輸出。當我不使用線程時,代碼運行正常。看來,當我使用線程時,它掛在通信調用上。我注意到的另一件事是,當我設置shell = False時,在線程中運行時我從通信中得不到任何回報。Python Subprocess.Popen從線程
21
A
回答
33
您沒有提供任何代碼,我們來看看,但這裏的,做類似的東西,以一個樣品你的描述:
import threading
import subprocess
class MyClass(threading.Thread):
def __init__(self):
self.stdout = None
self.stderr = None
threading.Thread.__init__(self)
def run(self):
p = subprocess.Popen('rsync -av /etc/passwd /tmp'.split(),
shell=False,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
self.stdout, self.stderr = p.communicate()
myclass = MyClass()
myclass.start()
myclass.join()
print myclass.stdout
9
這裏是不使用線程有很大的實現: constantly-print-subprocess-output-while-process-is-running
import subprocess
def execute(command):
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
output = ''
# Poll process for new output until finished
for line in iter(process.stdout.readline, ""):
print line,
output += line
process.wait()
exitCode = process.returncode
if (exitCode == 0):
return output
else:
raise Exception(command, exitCode, output)
execute(['ping', 'localhost'])
相關問題
- 1. subprocess.Popen在線程
- 2. subprocess.Popen不是線程安全的?
- 3. 的Python subprocess.Popen()
- 4. 更好的多線程使用Python subprocess.Popen&communications()?
- 5. 調用後的python中的線程鎖狀態是什麼subprocess.popen
- 6. 如何寫代碼subprocess.Popen線
- 7. python subprocess.Popen慢下uWSGI
- 8. Python subprocess.call和subprocess.Popen stdout
- 9. Python subprocess.Popen()後跟time.sleep
- 10. Python subprocess.popen和rdiff-backup
- 11. Pycharm subprocess.Popen python under virtualenv
- 12. Fedora 16,python subprocess.Popen從IDE vs終端
- 13. subprocess.Popen不會運行我的Python程序
- 14. 從Django調用subprocess.Popen
- 15. 正從subprocess.popen
- 16. 防止子線程死亡時線程subprocess.popen終止我的主腳本?
- 17. 傳遞參數給從subprocess.Popen
- 18. 使用subprocess.Popen恢復進程?
- 19. 如何使用STDIN從subprocess.Popen
- 20. Python - subprocess.Popen不返回輸出
- 21. python subprocess.Popen塊在futex_狀態
- 22. Python Subprocess.Popen屬性錯誤?
- 23. 攔截subprocess.Popen調用在Python
- 24. Python subprocess.popen通過網絡
- 25. Python subprocess.Popen使用git pager
- 26. python的subprocess.Popen跳過輸入
- 27. 如何殺死由Python subprocess.Popen()
- 28. Python 2.5的subprocess.Popen問題
- 29. Python的subprocess.Popen()和源代碼
- 30. 的Python subprocess.Popen通過管道
是的,這正是我正在做的。我想要讀取線程內的輸出。我也應該注意到我正在使用Python 2.3。我已經從2.4獲得了一個子進程的副本。 – noahd 2009-06-12 04:55:46
然後請將此標記爲「已回答」 – 2009-06-12 12:11:17