我是一個試圖採取截圖使用CutyCapt運行的Xvfb和CutyCapt像Python子
我的應用程序是用Python編寫,並通過運行一個子進程調用CutyCapt背景。
本地工作(Windows)就好了,但CutyCapt.exe for windows不需要x服務器。當我嘗試在我的Ubuntu機器上執行我的代碼時(通過python子進程),它咆哮着我不向Xvfb提供命令。但是,如果我在盒子上運行命令,它可以正常工作。
命令上盒的工作原理:
box$ xvfb-run --server-args="-screen 0, 1100x800x24" ./CutyCapt --url=http://www.google.com --out=temp.png
Python代碼失敗:
def url_screengrab(url, **kwargs):
url, temp_path, filename, url_hash = get_temp_screengrab_info(url)
args = []
if sys.platform.startswith("linux"):
args.append('xvfb-run')
args.append('--server-args="-screen 0, 1100x800x24"')
args.append(settings.CUTYCAPT_EXE_PATH)
args.append('--url=%s' % (url))
args.append('--out=%s' % (temp_path,))
subprocess.Popen(args, shell=False)
return temp_path, filename, url_hash
返回錯誤:
xvfb-run: usage error: need a command to run
box$
事情我已經嘗試: - 使用電話,而不是Popen - 從屏幕參數報價 - 在執行子進程之前將屏幕列入列表 -setting os.environ [「DISPLAY」] =「:0」
我需要從CutyCapt命令中斷開xvfb進程嗎?
任何幫助將不勝感激。
如果你正在使用'殼= TRUE',則第一個參數「Popen」應該是一個字符串,而不是一個列表。當'shell = False'(默認)時,第一個參數應該是一個列表。你用'shell = False'試過了嗎? – unutbu 2012-04-15 01:46:29
如果'settings.PLATFORM'不是''linux'','xvfb-run'如何被附加到'args'? – unutbu 2012-04-15 01:47:01
而不是手動構建參數,請嘗試'導入shlex; args = shlex.split('''xvfb-run --server-args =「 - screen 0,1100x800x24」./CutyCapt --url = http://www.google.com --out = temp.png'' 「)'。 – unutbu 2012-04-15 01:48:37