我正在編寫一個使用Selenium來屏幕刮另一個網站的Web應用程序。這種屏幕抓取只發生一次,所以我寧願不讓Selenium和Xvfb一直運行。如何在Python中使用子進程模塊啓動和停止Linux程序?
我想弄清楚如何從Python啓動Xvfb和Selenium,然後在屏幕抓取完成後停止它們。
如果我做手工,我會在命令行啓動它們,並創下CTRLÇ阻止他們。我試圖從Python做同樣的事情。
我似乎能夠成功啓動的Xvfb是這樣的:
xvfb = Popen('Xvfb :99 -nolisten tcp', shell=True)
但是,當我試圖終止它:
xvfb.terminate()
,然後試圖啓動它再次(通過重複我的初始命令),它告訴我它已經在運行。
這得到五個upvotes?我以爲我只是非常愚蠢! – 2011-04-01 17:12:34
在'xvfb.terminate()'之後嘗試'xvfb.wait()'。如果沒有,請嘗試'xvfb.kill()'。 – 2011-04-01 17:14:48
Ctrl-C將SIGTERM發送到Unix進程。您的用戶python進程無法將SIGTERM發送到以root身份運行的Xvfb。得到你孩子的pid,執行「sudo kill」,然後執行「xvfb.wait()」。 –
2011-04-01 17:15:44