将Xvfb和CutyCapt作为Python子进程运行
作者:互联网
我正在尝试使用CutyCapt在后台截取屏幕截图
我的应用程序是用python编写的,并通过运行子进程调用CutyCapt.
在本地(Windows)工作正常,但Windows的CutyCapt.exe不需要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
– 从屏幕args中删除引用
– 破解屏幕进入列表
– 在执行子进程之前设置os.environ [“DISPLAY”] =“:0”
我是否需要从CutyCapt命令中解除xvfb进程?
任何帮助将不胜感激.
解决方法:
在Ubuntu 11.10上,安装了cutycapt和xvfb软件包,以下工作(至少对我而言……):
import shlex
import subprocess
def url_screengrab(url, **kwargs):
cmd = '''xvfb-run --server-args "-screen 0, 1100x800x24"
/usr/bin/cutycapt --url={u} --out=temp.png '''.format(u = url)
proc = subprocess.Popen(shlex.split(cmd))
proc.communicate()
url = 'http://www.google.com'
url_screengrab(url)
标签:xvfb,python,subprocess,cutycapt 来源: https://codeday.me/bug/20190826/1729696.html