我是一个试图采取截图使用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